我有一个 Pandas 数据框,其中列包含值列表。像下面这样。
A B
0 ['x','x','y','y','z'] ['m','m','n','n','p']
我想为列表中的每个唯一项目创建单独的列,并在这些新列下提及每个项目的计数。
A B x y z m n p
0 ['x','x','y','y','z'] ['m','m','n','n','p'] 2 2 1 2 2 1
有人可以为此编写代码吗?
请您参考如下方法:
使用:
pd.concat([df,df.stack().explode().value_counts().to_frame().T],axis=1)
输出:
A B m x y n z p
0 [x, x, y, y, z] [m, m, n, n, p] 2 2 2 2 1 1
如果你想保持列表的顺序:
s=df.stack().explode()
pd.concat([df,s.value_counts().reindex(s.drop_duplicates()).to_frame().T],axis=1)
A B x y z m n p
0 [x, x, y, y, z] [m, m, n, n, p] 2 2 1 2 2 1
不止一行:
pd.concat([df,df.stack().explode().groupby(level=0).value_counts().unstack()],axis=1)
A b m n p q x y z
0 [x, x, y, y, z] [m, m, n, n, p] 2.0 2.0 1.0 NaN 2.0 2.0 1.0
1 [y, y, y, y, z] [p, q, n, n, p] NaN 2.0 2.0 1.0 NaN 4.0 1.0
