插值第一系列,并输出第二个(常数)系列的常数。

3
我正在尝试创建一个函数,可以填充多个序列中缺失的数字,这些序列具有不同的数值比例,并且同时为每个序列生成一个常数列。
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

你在哪里为 for 循环定义变量 data - Joe Ferndz
你只需要一个函数来插值一个系列,并输出第二个(常数)系列的常数。你的标题太具有误导性了。我不明白你所说的“不同数字比例”是什么意思,最好删除它,并将标题缩小到最小限度。 - smci
1个回答

1

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


非常感谢Shubham Sharma,我以为panda更容易,我已经研究了很长时间的代码,但是我无法让它工作。在你的公式中,它告诉我"g"和"df"彼此依赖。 - Dandal
1
@Dandal,让我们在这里讨论。 - Shubham Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接