python - 成对转置多列 - pandas python
问题描述
我想转置多列成对的两个
我有以下列:
user_id', 'fullname', 'email', 'handle', 'audience_ethnicities_code0', 'audience_ethnicities_weight0', 'audience_ethnicities_code1', 'audience_ethnicities_weight1', 'audience_ethnicities_code2', 'audience_ethnicities_weight2', 'audience_ethnicities_code3', 'audience_ethnicities_weight3'
其中代码和重量是相关的,例如:
user_id = ABCD
'audience_ethnicities_code0' = asian;
'audience_ethnicities_weight0' = 0.4
'audience_ethnicities_code1' = african;
'audience_ethnicities_weight1' = 0.2
'audience_ethnicities_code2' = white;
'audience_ethnicities_weight2' = 0.2
'audience_ethnicities_code3' = hispanic;
'audience_ethnicities_weight3' = 0.2
总权重 = 1,用户 ABCD 的受众是 40% 的亚洲人,20% 的非洲人等。我想要的是audience_ethnicities_code_n
在列和行中audience_ethnicities_weight_n
为每个用户提供种族 ()
我尝试了这个查询,但它给了我一个混乱的结果:
df1 = df.pivot_table(index=['user_id', 'fullname', 'email', 'handle'],
columns=['audience_ethnicities_code0', 'audience_ethnicities_code1', 'audience_ethnicities_code2', 'audience_ethnicities_code3'],
values=['audience_ethnicities_weight0', 'audience_ethnicities_weight1', 'audience_ethnicities_weight2', 'audience_ethnicities_weigh3'], aggfunc=lambda x: ' '.join(str(v) for v in x))
df1
有任何想法吗?
解决方案
我会迭代地对每一列进行数据透视,然后按索引合并数据框。
这里有一个例子:
from functools import reduce
index = ['user_id', 'fullname', 'email', 'handle']
dfList = []
for i in range(3):
dfList.append(df.pivot_table(index=index,
columns='audience_ethnicities_code{}'.format(i),
values='audience_ethnicities_weight{}'.format(i))
.rename_axis(None, axis=1)
.reset_index())
reduce(lambda x, y: pd.merge(x, y, on=index), dfList)
推荐阅读
- wordpress - 使用 wpml 进行 Woocommerce 自定义状态翻译
- rust - 如何静态链接到现有的 rlib?
- javascript - 使用 javascript 切换禁用属性
- filter - 如何在arrayList过滤器中获取索引列表
- mysql - 我们可以根据某些条件从同一张表中删除吗?
- angular - 如何获取更多的 api 数据
- android - 如何为 Android 应用构建可点击的网格
- c# - c#百分比计算解释
- python - iptfile = args 和 args[0] 或“Python/graminit.c”
- google-cloud-platform - 虚拟机实例停止时配置文件是否丢失