gpt4 book ai didi

python - 透视两列数据框

转载 作者:太空狗 更新时间:2023-10-30 01:04:21 24 4
gpt4 key购买 nike

问题

我有一个数据框 untidy

  attribute value
0 age 49
1 sex M
2 height 176
3 age 27
4 sex F
5 height 172

'attribute' 列中的值会定期重复。所需的输出是 tidy

  age sex height
0 49 M 176
1 27 F 172

(行列顺序或附加标签无关紧要,我可以自己清理。)

实例化代码:

untidy = pd.DataFrame([['age', 49],['sex', 'M'],['height', 176],['age', 27],['sex', 'F'],['height', 172]], columns=['attribute', 'value'])
tidy = pd.DataFrame([[49, 'M', 176], [27, 'F', 172]], columns=['age', 'sex', 'height'])

尝试

这看起来像是一个简单的数据透视操作,但我最初的方法引入了 NaN 值:

>>> untidy.pivot(columns='attribute', values='value')                                                                                                       
attribute age height sex
0 49 NaN NaN
1 NaN NaN M
2 NaN 176 NaN
3 27 NaN NaN
4 NaN NaN F
5 NaN 172 NaN

一些困惑的尝试来解决这个问题:

>>> untidy.pivot(columns='attribute', values='value').apply(lambda c: c.dropna().reset_index(drop=True))
attribute age height sex
0 49 176 M
1 27 172 F


>>> untidy.set_index([untidy.index//untidy['attribute'].nunique(), 'attribute']).unstack('attribute')
value
attribute age height sex
0 49 176 M
1 27 172 F

执行此操作的惯用方法是什么?

最佳答案

使用pandas.pivotGroupBy.cumcount用于新的索引值和 rename_axis删除列名:

df = pd.pivot(index=untidy.groupby('attribute').cumcount(),
columns=untidy['attribute'],
values=untidy['value']).rename_axis(None, axis=1)
print (df)
age height sex
0 49 176 M
1 27 172 F

另一种解决方案:

df = (untidy.set_index([untidy.groupby('attribute').cumcount(), 'attribute'])['value']
.unstack()
.rename_axis(None, axis=1))

关于python - 透视两列数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54322621/

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