gpt4 book ai didi

python - 计算每个 pandas 列中数据出现的次数

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:33 25 4
gpt4 key购买 nike

我有以下数据框:

import pandas as pd
df = pd.DataFrame({"E": ["X", "Y", "X", "X", "Y", "X"], "F": ["Y", "Y", "X", "Y", "X","Y"], "G": ["Y", "X", "X", "X", "Y", "X"], "I": ["A", "B", "B", "B", "A", "A"]})
df.set_index("I", drop = True, inplace = True)

print(df)
E F G
I
A X Y Y
B Y Y X
B X X X
B X Y X
A Y X Y
A X Y X

我现在想计算每列 E、F、G 的每个组合 A-X、A-Y、B-X、B-Y 的出现次数,因此预期输出为:

       E     F     G
X Y X Y X Y
I
A 2 1 1 2 1 2
B 2 1 1 2 3 0

我知道我可以用 pd.crosstab 为一列做这件事。所以我可以遍历列并连接数据帧:

for i, column in enumerate(df.columns):
if i == 0:
df1 = pd.crosstab(df.index, df[column])
else:
df1 = pd.concat([df1, pd.crosstab(df.index, df[column])], axis = 1)

但是除了迭代让人感觉不顺畅并且我希望有更好的解决方案这一事实之外,索引还丢失了有关初始列的信息:

       X  Y  X  Y  X  Y
row_0
A 2 1 1 2 1 2
B 2 1 1 2 3 0

实现正确输出的方法是什么?

最佳答案

你可以使用get_dummies在 df 上,然后在索引上使用 groupby 并使用 sum:

df1 = pd.get_dummies(df).groupby(level=0).sum()

你得到:

   E_X  E_Y  F_X  F_Y  G_X  G_Y
I
A 2 1 1 2 1 2
B 2 1 1 2 3 0

如果你想要列的多索引级别,你可以这样做:

df1.columns = pd.MultiIndex.from_tuples([col.split('_') for col in df1.columns])

你得到了你预期的输出

关于python - 计算每个 pandas 列中数据出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51573525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com