亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

熊貓 groupby() 的 KeyError 應用()

熊貓 groupby() 的 KeyError 應用()

慕森卡 2022-07-26 10:25:32
在這里,我將時間添加到僅給出日期的數據中。值之間有 5 分鐘或每個日期 288 個值。該代碼在輸入數據幀為 1 天(288 行)或更短時有效,但在輸入較長時會出錯。知道我錯過了什么嗎?提前致謝。相關代碼部分:import datetime as dtprint("Print df_raw:\n", df_raw)df = df_raw[:288]# df = df_raw[:289]  # Gives KeyError, see traceback belowprint("\nPrint df BEFORE groubpy/apply:\n", df)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 xdf = df.groupby('date').apply(f)df = df.set_index('DT').drop(columns='date')print("\nPrint df AFTER groubpy/apply:\n", df)輸出(288 行或更少,按預期工作):Print df_raw:           date   values0   2015-03-10   556.250   2015-03-10  516.9930   2015-03-10   468.750   2015-03-10  432.8120   2015-03-10  87.1095..         ...      ...84  2014-12-16     None84  2014-12-16     None84  2014-12-16  160.93884  2014-12-16  145.11884  2014-12-16  125.977[24480 rows x 2 columns]Print df BEFORE groubpy/apply:           date   values0   2015-03-10   556.250   2015-03-10  516.9930   2015-03-10   468.750   2015-03-10  432.8120   2015-03-10  87.1095..         ...      ...0   2015-03-10  781.4460   2015-03-10   743.360   2015-03-10  708.9850   2015-03-10  669.9220   2015-03-10  632.422[288 rows x 2 columns]Print df AFTER groubpy/apply:                       valuesDT                          2015-03-10 00:00:00   556.252015-03-10 00:05:00  516.9932015-03-10 00:10:00   468.752015-03-10 00:15:00  432.8122015-03-10 00:20:00  87.1095...                      ...2015-03-10 23:35:00  781.4462015-03-10 23:40:00   743.362015-03-10 23:45:00  708.9852015-03-10 23:50:00  669.9222015-03-10 23:55:00  632.422[288 rows x 1 columns]
查看完整描述

2 回答

?
慕田峪4524236

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


查看完整回答
反對 回復 2022-07-26
?
開滿天機

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


查看完整回答
反對 回復 2022-07-26
  • 2 回答
  • 0 關注
  • 96 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號