内插一个系列,并输出第二个常数系列的常数 详细信息:

问题描述

我正在尝试创建一个函数,该函数可以用不同的数字刻度填充多个系列中的缺失数字,并同时为每个系列生成一个常数列。

from tika import parser
import pandas as pd
import numpy as np
import io

rawtext = parser.from_file('D:\Selenium\Texto.txt')
text = rawtext['content']
f = io.StringIO(text)
f.readline()
data = f.read()
f.readline()
def fill(d):
    idx = range(d['col1'].min(),d['col1'].max() + 1)
    return d.set_index('col1').reindex(idx,method='ffill').reset_index()
g = df['col1'].lt(df['col1'].shift()).cumsum()
df = pd.concat([fill(g) for k,g in df.groupby(g)],ignore_index=True)
print(df)

是否可以用Pandas创建以下功能

示例数据框:

1029 400
1035 400
1031 340
1039 340
1020 503
1025 503

预期输出

1029 400
1030 400
1031 400
1032 400
1033 400
1034 400
1035 400
1031 340
1032 340
1033 340
1034 340
1035 340
1036 340
1037 340
1038 340
1039 340
1020 503
1021 503
1022 503
1023 503
1024 503
1025 503

解决方法


def fill(d):
    idx = range(d['col1'].min(),d['col1'].max() + 1)
    return d.set_index('col1').reindex(idx,method='ffill').reset_index()


g = df['col1'].lt(df['col1'].shift()).cumsum()
df = pd.concat([fill(g) for k,g in df.groupby(g)],ignore_index=True)

详细信息:

标识col1中所有缺少值的单调递增部分。可以借助Series.lt + Series.shiftSeries.cumsum来创建石斑鱼g

print(g)
0    0
1    0
2    1
3    1
4    2
5    2
Name: col1,dtype: int64

然后groupby使用此分组器上的数据框,并使用自定义定义函数为每个分组的框fill使用空白,该自定义函数利用数据框的reindex方法来填充缺失值

print(fill(g)) # sample filled values for first group
   col1  col2
0  1029   400
1  1030   400
2  1031   400
3  1032   400
4  1033   400
5  1034   400
6  1035   400

最后使用pd.concat,在填充缺失值后将所有这些分组的帧连接起来。

print(df)
    col1  col2
0   1029   400
1   1030   400
2   1031   400
3   1032   400
4   1033   400
5   1034   400
6   1035   400
7   1031   340
8   1032   340
9   1033   340
10  1034   340
11  1035   340
12  1036   340
13  1037   340
14  1038   340
15  1039   340
16  1020   503
17  1021   503
18  1022   503
19  1023   503
20  1024   503
21  1025   503