基于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中引用的字符串创建列占总数的百分比的主要内容,如果未能解决你的问题,请参考以下文章
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数据实战