gpt4 book ai didi

python - Pandas :将成对的列转换为单元格

转载 作者:太空狗 更新时间:2023-10-30 02:16:17 24 4
gpt4 key购买 nike

我有一个像这样的 Pandas 数据框:

ts | thing_0 | qty_0 | thing_1 | qty_1 | thing_2 | qty_2
--------------------------------------------------------
1 | dog | 5 | cat | 3 | mouse | 1
2 | house | 6 | dog | 4 | cat | 2
...

我想将其转换为 thing 成为列,qty 成为单元格值。像这样:

ts | dog | cat | mouse | house
------------------------------
1 | 5 | 3 | 1 | 0
2 | 4 | 2 | 0 | 6
...

目前,我通过手动遍历 df.values 数组来手动执行此转换,但这非常慢。有没有更快的方法用 pandas means 来实现这个?

我看过df.pivot , 但找不到描述 thing_0qty_0 之间关系的方法。

最佳答案

您可以使用 lreshape 合并 thingqty 列:

In [10]: pd.lreshape(df, {'thing':['thing_0','thing_1','thing_2',], 'qty':['qty_0','qty_1','qty_2']})
Out[10]:
ts thing qty
0 1 dog 5
1 2 house 6
2 1 cat 3
3 2 dog 4
4 1 mouse 1
5 2 cat 2

然后pivot创建所需的DataFrame:

import pandas as pd

df = pd.DataFrame({'qty_0': [5, 6], 'qty_1': [3, 4], 'qty_2': [1, 2], 'thing_0': ['dog', 'house'], 'thing_1': ['cat', 'dog'], 'thing_2': ['mouse', 'cat'], 'ts': [1, 2]})

reshaped = pd.lreshape(df, {'thing':['thing_0','thing_1','thing_2',],
'qty':['qty_0','qty_1','qty_2']})

result = reshaped.pivot(index='ts', columns='thing', values='qty')
print(result)

产量

thing  cat  dog  house  mouse
ts
1 3.0 5.0 0.0 1.0
2 2.0 4.0 6.0 0.0

我认为jezrael's solution更好,因为它利用了您希望合并的列名的规律性。 df.columns.str.split('_', expand=True)

更通用且重复更少
{'thing':['thing_0','thing_1','thing_2',], 
'qty':['qty_0','qty_1','qty_2']}

lreshape 在您希望合并列名的情况下可能会有所帮助不规则。

关于python - Pandas :将成对的列转换为单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969784/

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