gpt4 book ai didi

python - Pandas:包含变量名称和值的多列:如何使用 Pivot?

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:18 24 4
gpt4 key购买 nike

我不确定是否以及如何进行以下转换:

我有一个如下所示的 DataFrame:

Index   Name    detail1 detail1_value   detail2  detail2_value   detail3    detail3_value
1 Albert Age 30 Group A Hometown beautifulplace
2 Bea Age 28 Hometown anotherplace None None
3 Celin Age 45 Group B None None
4 Dave Group A None None None None

但如你所想,我的目标是:

Index   Name    Age Group   Hometown
1 Albert 30 A beautifulplace
2 Bea 28 anotherplace
3 Celin 45 B
4 Dave A

我很确定每个细节只出现一次。为了让事情变得复杂:我不确定每个细节是否完全相同(在某些情况下,例如 Hometowns 而不是 Hometown)。

到目前为止,我能看到的唯一解决方案是从每对列(如 detail1 和 detail1_value)中生成单个数据透视表。在第二步中,创建一个新数据集,并在例如年龄信息中搜索每个数据透视表。但是我对 python 的信任告诉我,一定有更好的方法......

谢谢!

附言:可能有帮助:

dataset = pd.DataFrame({'Name': ['Albert', 'Bea', 'Celine', 'Dave'],
'detail1': ['Age', 'Age', 'Age', 'Group'],
'detail1_value': ['30', '28', '45', 'A'],
'detail2': ['Group', 'Hometown', 'Group', None],
'detail2_value': ['A', 'anotherplace', 'B', None],
'detail3': ['Hometown', None, None, None],
'detail3_value': ['beautifulplace', None, None, None]})

最佳答案

您可以使用 lreshapepivot :

#get columns names dynamically 
a = dataset.columns[dataset.columns.str.endswith('_value')]
b = dataset.columns[dataset.columns.str.startswith('detail')].difference(a)

df = pd.lreshape(dataset, {'detail':b, 'value':a})
print (df)
Name value detail
0 Albert 30 Age
1 Bea 28 Age
2 Celine 45 Age
3 Dave A Group
4 Albert A Group
5 Bea anotherplace Hometown
6 Celine B Group
7 Albert beautifulplace Hometown


df = df.pivot(index='Name', columns='detail', values='value')
print (df)
detail Age Group Hometown
Name
Albert 30 A beautifulplace
Bea 28 None anotherplace
Celine 45 B None
Dave None A None

最后一些数据清理:

df = df.reset_index().rename_axis(None, axis=1)
print (df)
Name Age Group Hometown
0 Albert 30 A beautifulplace
1 Bea 28 None anotherplace
2 Celine 45 B None
3 Dave None A None

关于python - Pandas:包含变量名称和值的多列:如何使用 Pivot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45592411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com