微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。