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
添加回答
舉報