[英]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.