繁体   English   中英

根据列表 Python DataFrame 中的引用字符串创建列占总数的百分比

[英]Create Columns Percentage of Total Based on Referenced Strings In List Python DataFrame

我有一个数据框,它本质上是一些索引,其中包含一个包含 1 和 0 行中的值的列数据透视表。 一列“总计”是给定行中 1 的总和。 每个列名是我引用的列表中项目的第一个索引。 我想做的是为引用这些列的总列的百分比创建列,并提取第三个索引,该索引是一个字符串,代表世界上的一个地区,例如“美国”、“德国”等。

数据框如下:

Name     Total  Option1  Option2  Option3  Option4  Option5  Option6  Option7
Michael   4       1        0        0        1        0        1        1
Gerry     2       1        0        0        0        0        0        1

数据透视表数据框引用的列表

ids = [('Option1', '37i9dQZF1DX0XUsuxWHRQd', 'United States'), 
('Option2', '37i9dQZF1DX2RxBh64BHjQ', 'Germany'), 
('Option3', '37i9dQZF1DX5hR0J49CmXC', 'Denmark'), 
('Option4', '37i9dQZF1DX8f6LHxMjnzD', 'Australia'), 
('Option5', '37i9dQZF1DWSOkubnsDCSS', 'United Kingdom'), 
('Option6', '37i9dQZF1DX0QKpU3cGsyb', 'United States'), 
('Option7', '37i9dQZF1DX60OAKjsWlA2', 'United States')]

预期产出

Name     Total  %United States  %Germany   %Denmark   %Australia  %United Kingdom  Option1  Option2  Option3  Option4  Option5  Option6  Option7
Michael   4         .75             0          0          .25            0            1        0        0        1        0        1        1
Gerry     2          1              0          0           0             0            1        0        0        0        0        0        1

您可以映射列和分组:

# assuming that Name are unique
df = df.set_index('Name')

renamed = df.columns[1:].map(pd.DataFrame(ids).set_index(0)[2])

(df.iloc[:,1:].T
   .groupby(renamed).sum().T
   .div(df['Total'], axis=0)
   .assign(Total=df['Total'])
   .reset_index()
)

输出:

      Name  Australia  Denmark  Germany  United Kingdom  United States  Total
0  Michael       0.25      0.0      0.0             0.0           0.75      4
1    Gerry       0.00      0.0      0.0             0.0           1.00      2

暂无
暂无

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

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