基于List Python DataFrame中引用的字符串创建列占总数的百分比

Posted

技术标签:

【中文标题】基于List Python DataFrame中引用的字符串创建列占总数的百分比【英文标题】:Create Columns Percentage of Total Based on Referenced Strings In List Python DataFrame 【发布时间】:2020-06-10 20:15:32 【问题描述】:

我有一个数据框,它本质上是一些索引,其中包含列的数据透视表,其值位于 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

【问题讨论】:

到底是什么问题?你有没有尝试过,做过任何研究? Stack Overflow 不是免费的代码编写服务。请参阅:tour、How to Ask、help center、meta.***.com/questions/261592/…。你甚至没有提供一个像样的minimal reproducible example。 【参考方案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

【讨论】:

以上是关于基于List Python DataFrame中引用的字符串创建列占总数的百分比的主要内容,如果未能解决你的问题,请参考以下文章

Python Dataframe转List

[转载]合并 list 中的 dataframe

Python——DataFrame转list(包含两种)

pandas基于列表内容对dataframe数据行进行筛选(isin函数)实战:Filter DataFrame rows on a list of values

Python: Pandas的DataFrame如何按指定list排序

pandas基于元组列表(list of tuples)列表词典(dictionary of lists)词典列表(list of dictionaries)构建dataframe数据实战