根据列表Python数据框中引用的字符串创建列占总数的百分比
我有一个dataframe,它本质上是一些索引,有一个数据透视表,列的值在1和0的行中。一列“总计”是给定行中1的总计。每个列名都是我引用的列表中项目的第一个索引。我想做的是为引用这些列的总列的百分比创建列,并提取第三个索引,这是一个表示世界上某个地区的字符串,如“美国”、“德国”等 数据框如下:根据列表Python数据框中引用的字符串创建列占总数的百分比,python,pandas,list,dataframe,indexing,Python,Pandas,List,Dataframe,Indexing,我有一个dataframe,它本质上是一些索引,有一个数据透视表,列的值在1和0的行中。一列“总计”是给定行中1的总计。每个列名都是我引用的列表中项目的第一个索引。我想做的是为引用这些列的总列的百分比创建列,并提取第三个索引,这是一个表示世界上某个地区的字符串,如“美国”、“德国”等 数据框如下: Name Total Option1 Option2 Option3 Option4 Option5 Option6 Option7 Michael 4 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
您可以映射列和groupby:
# 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
到底是什么问题?你试过什么,做过什么研究吗?堆栈溢出不是免费的代码编写服务。见:。你甚至没有提供一个像样的。