2 回答

TA贡献1875条经验 获得超5个赞
当您将 apply 函数与 groupby 一起使用时,您无法访问函数内部的 group 键。
相反,您可以逐组遍历分组的数据帧,并将处理后的数据帧附加在一起。
import pandas as pd
t = pd.DataFrame({'date':['2015-03-10','2015-03-10','2015-03-10','2015-03-10','2015-03-11','2015-03-11','2015-03-11'],'value':[1,2,3,4,5,6,7]})
t['date'] = pd.to_datetime(t['date'])
创建一个新的数据框并将已处理的组附加到它。
em = pd.DataFrame()
for key,df in t.groupby('date'):
temp = df
temp['dt'] = [i+datetime.timedelta(minutes=j*5) for i,j in zip(df['date'],range(df['date'].shape[0]))]
em = pd.concat([em,temp])
输出:
date value dt
0 2015-03-10 1 2015-03-10 00:00:00
1 2015-03-10 2 2015-03-10 00:05:00
2 2015-03-10 3 2015-03-10 00:10:00
3 2015-03-10 4 2015-03-10 00:15:00
4 2015-03-11 5 2015-03-11 00:00:00
5 2015-03-11 6 2015-03-11 00:05:00
6 2015-03-11 7 2015-03-11 00:10:00

TA贡献1786条经验 获得超13个赞
你得到了,因为当你在 groupby 之后KeyError: 'date'使用它时,它没有被传递到函数中。apply()例如,您尝试将 lambda 添加到应用中。我不确定预期的行为,但它使功能正常工作。将其更改为:
df = df.groupby('date').apply(lambda x: f(x))
完整的工作示例:
import datetime as dt
df = pd.DataFrame({'A':[1,2],'date':['2018-09-09','2019-09-09']})
df.loc[:,'date'] = pd.to_datetime(df['date'])
def f(x):
x['DT']=[val+dt.timedelta(minutes=(pos*5)) for val,pos in zip(x.loc[:,'date'], range(0,len(x.loc[:,'date'])))]
return x
df = df.groupby('date').apply(lambda x : f(x))
df = df.set_index('DT').drop(columns='date')
print(df)
输出:
A
DT
2018-09-09 1
2019-09-09 2
添加回答
举报