[英]pandas pivot_table to DataFrame
我有看起來像這樣的數據
from pandas import DataFrame
data = [{'id': 1, 'label': 0, 'code': 'f1'}, {'id': 1, 'label': 0, 'code': 'f2'},
{'id': 2, 'label': 1, 'code': 'f3'},
{'id': 2, 'label': 1, 'code': 'f4'}]
df = DataFrame(data)
>>>
code id label
0 f1 1 0
1 f2 1 0
2 f3 2 1
3 f4 2 1
我想將數據重塑為類似的格式(具有正確的標頭,並且沒有不正確的id-label
關聯)。
id label f1 f2 f3 f4
1 0 1 1 0 0
2 1 0 0 1 1
我嘗試使用pivot_table
,但是數據看起來像這樣
df['val'] = 1
pt_df = df.pivot_table('val', columns='code', index=['id', 'label'], fill_value=0, dropna=False)
>>>
f1 f2 f3 f4
1 0 1 1 0 0
1 0 0 0 0
2 0 0 0 0 0
1 0 0 1 1
任何的意見都將會有幫助! 謝謝
我使用了unstack,這實際上是關鍵...
df['vals'] = 1
df = df.set_index(['id' ,'label' ,'code']).unstack('code').fillna(0)
#df = df.reset_index() #to bring out id and label
這是一種方法:
>>> df.pivot_table(columns='code', index=['id', 'label'], aggfunc=len, fill_value=0)
code f1 f2 f3 f4
id label
1 0 1 1 0 0
2 1 0 0 1 1
[2 rows x 4 columns]
如果要在列中使用ID /標簽信息而不是在索引中,只需使用reset_index
。
您的示例數據集很小,因此尚不清楚這是否可以概括您想要的方式。 基本上,它所做的是將id / label和code的每個組合的值設置為具有該組合的DataFrame的行數(例如,id = 1,label = 0,code = f1的值為1,因為在那里是包含這些值的一行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.