为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 唯一值作为带有计数的列

Pandas 唯一值作为带有计数的列

慕莱坞森 2024-01-04 09:58:59
使用 pandas 数据帧并尝试在分组输出中翻转它,该输出采用唯一值并将它们作为一列,并将每个值的相应计数作为新数据帧中的值。这是起始数据框:df = pd.DataFrame([('gold', 'bronze', 'silver'),                   ('silver', 'gold', 'bronze'),                   ('gold', 'silver', 'bronze'),                   ('bronze', 'silver', 'gold')],                    columns=('Canada', 'China', 'South Korea'))df.head()    Canada  China   South Korea0   gold    bronze  silver1   silver  gold    bronze2   gold    silver  bronze3   bronze  silver  gold所需的输出将是这样的:    nation      gold    silver  bronze0   Canada        2          1       11   China         1          2       12   South Korea   1          1       2
查看完整描述

4 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

您可以df.apply*一起使用pd.value_counts

df.apply(pd.value_counts).T


             bronze  gold  silver

Canada            1     2       1

China             1     1       2

South Korea       2     1       1

* 我没有找到 的文档pd.value_counts,因此将 github 链接链接到该函数。

编辑:在阅读源代码时pd.Series.value_counts只需调用pd.value_counts


查看完整回答
反对 回复 2024-01-04
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

w = df.melt()


    variable    value

0   Canada      gold

1   Canada      silver

2   Canada      gold

3   Canada      bronze

4   China       bronze

5   China       gold

6   China       silver

7   China       silver

8   South Korea silver

9   South Korea bronze

10  South Korea bronze

11  South Korea gold

进而:


pd.crosstab(w['variable'],w['value'])

期望的结果:


value        bronze gold    silver

variable            

Canada        1      2       1

China         1      1       2

South Korea   2      1       1



查看完整回答
反对 回复 2024-01-04
?
FFIVE

TA贡献1797条经验 获得超6个赞

使用pd.get_dummies和sum


pd.get_dummies(df.T, prefix='',prefix_sep='').sum(level=0,axis=1)


Out[995]:

             bronze  gold  silver

Canada            1     2       1

China             1     1       2

South Korea       2     1       1


查看完整回答
反对 回复 2024-01-04
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

df = pd.DataFrame([('gold', 'bronze', 'silver'),

               ('silver', 'gold', 'bronze'),

               ('gold', 'silver', 'bronze'),

               ('bronze', 'silver', 'gold')],

                columns=('Canada', 'China', 'South Korea')).transpose()


df.apply(pd.value_counts,axis=1)


查看完整回答
反对 回复 2024-01-04
  • 4 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信