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

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

groupby 后的 Pandas Keyerror

groupby 后的 Pandas Keyerror

holdtom 2023-05-16 16:42:33
我想在對它進行分組后過濾數據框,但遇到了一個鍵錯誤,這里是一些示例代碼:df = pd.DataFrame([                [0, 1, 'm', 5.0], [0, 1, 'm', -7.0],[0, 1, 'm', 9.0],[0, 1, 'm', 32.0],[0, 1, 'm', -11.0],                [0, 6, 'm', -12.0], [0, 6, 'm', 15.0],[0, 6, 'm', -16.0],[0, 6, 'm', -3.0],[0, 6, 'm', 21.0],                [0, 12, 'm', 15.0], [0, 12, 'm', 51.0],[0, 12, 'm', 4.0],[0, 12, 'm', 3.0],[0, 12, 'm', 1.0],                [1, 1, 'm', 5.0], [1, 1, 'm', -7.0],[1, 1, 'm', 9.0],[1, 1, 'm', 32.0],[1, 1, 'm', -11.0],                [1, 6, 'm', -12.0], [1, 6, 'm', 15.0],[1, 6, 'm', -16.0],[1, 6, 'm', -3.0],[1, 6, 'm', 21.0],                [1, 12, 'm', 15.0], [1, 12, 'm', 51.0],[1, 12, 'm', 4.0],[1, 12, 'm', 3.0],[1, 12, 'm', 1.0]                ],                columns=['id', 'timeperiod', 'timeperiodtype', 'value'])df['good'] = df['value'].apply(lambda x: 1 if x>0 else 0)print(df)print(df[df['timeperiod']>6])df = df[['id', 'timeperiod','timeperiodtype','good']][df['timeperiod']>0].groupby(['id','timeperiod','timeperiodtype']).mean()print(df[df['timeperiod']>6])我想避免使用 reset_index,因為在最終代碼中我將有幾個形狀相似的數據幀,我將聚合/合并/連接這些數據幀。我確定我一定遺漏了一些明顯的東西。如何使用列名來過濾分組數據框?
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

用于DataFrame.loc按條件和列名過濾,然后用于避免MultiIndex添加DataFrame.reset_index或參數as_index=False

df?=?df.loc[df['timeperiod']>0,?['id',?'timeperiod','timeperiodtype','good']].groupby(['id','timeperiod','timeperiodtype']).mean().reset_index()

或者:

df?=?df.loc[df['timeperiod']>0,?['id',?'timeperiod','timeperiodtype','good']].groupby(['id','timeperiod','timeperiodtype'],?as_index=False).mean()


print(df)

? ?id? timeperiod timeperiodtype? good

0? ?0? ? ? ? ? ?1? ? ? ? ? ? ? m? ?0.6

1? ?0? ? ? ? ? ?6? ? ? ? ? ? ? m? ?0.4

2? ?0? ? ? ? ? 12? ? ? ? ? ? ? m? ?1.0

3? ?1? ? ? ? ? ?1? ? ? ? ? ? ? m? ?0.6

4? ?1? ? ? ? ? ?6? ? ? ? ? ? ? m? ?0.4

5? ?1? ? ? ? ? 12? ? ? ? ? ? ? m? ?1.0


print(df[df['timeperiod']>6])

? ?id? timeperiod timeperiodtype? good

2? ?0? ? ? ? ? 12? ? ? ? ? ? ? m? ?1.0

5? ?1? ? ? ? ? 12? ? ? ? ? ? ? m? ?1.0

編輯:


對于過濾器,MuiltiIndex可以使用Index.get_level_values


df = df.loc[df['timeperiod']>0, ['id', 'timeperiod','timeperiodtype','good']].groupby(['id','timeperiod','timeperiodtype']).mean()

print(df)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? good

id timeperiod timeperiodtype? ? ??

0? 1? ? ? ? ? m? ? ? ? ? ? ? ? 0.6

? ?6? ? ? ? ? m? ? ? ? ? ? ? ? 0.4

? ?12? ? ? ? ?m? ? ? ? ? ? ? ? 1.0

1? 1? ? ? ? ? m? ? ? ? ? ? ? ? 0.6

? ?6? ? ? ? ? m? ? ? ? ? ? ? ? 0.4

? ?12? ? ? ? ?m? ? ? ? ? ? ? ? 1.0

? ?

print(df[df.index.get_level_values('timeperiod')>6])

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? good

id timeperiod timeperiodtype? ? ??

0? 12? ? ? ? ?m? ? ? ? ? ? ? ? 1.0

1? 12? ? ? ? ?m? ? ? ? ? ? ? ? 1.0


查看完整回答
反對 回復 2023-05-16
  • 1 回答
  • 0 關注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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