簡體   English   中英

熊貓pivot_table到DataFrame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM