繁体   English   中英

将 DataFrame 中的每个唯一值重塑为列

[英]Reshape each unique value in DataFrame to column

我有一个与此类似的 DataFrame:

  12 11 10
1  a  b  a
2  c  c  a
3  c  b  b
4  b  a  a

我想为 DataFrame 中的每个唯一值创建一个列,并将这些列作为值,例如:

         a        b        c
1  [12,10]     [11]      NaN
2     [10]      NaN  [12,11]
3      NaN  [11,10]     [12]
4  [11,10]     [12]      NaN

您可以通过DataFrame.stack重塑,将MultiIndex转换为列,然后使用Series.unstack聚合list ,最后通过DataFrame.rename_axis删除索引和列名称:

df1 = (df.stack()
         .reset_index(name='v')
         .groupby(['level_0','v'])['level_1']
         .apply(list)
         .unstack()
         .rename_axis(index=None, columns=None))
print (df1)
          a         b         c
1  [12, 10]      [11]       NaN
2      [10]       NaN  [12, 11]
3       NaN  [11, 10]      [12]
4  [11, 10]      [12]       NaN

或者将索引转换为列,因此可以通过它使用DataFrame.melt然后使用与以前相同的步骤:

df1 = (df.reset_index()
         .melt('index')
         .groupby(['index','value'])['variable']
         .apply(list)
         .unstack()
         .rename_axis(index=None, columns=None))
print (df1)
          a         b         c
1  [12, 10]      [11]       NaN
2      [10]       NaN  [12, 11]
3       NaN  [11, 10]      [12]
4  [11, 10]      [12]       NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM