gpt4 book ai didi

python - 使用 python/pandas 将任意多列转换为键值对

转载 作者:行者123 更新时间:2023-12-02 19:33:48 25 4
gpt4 key购买 nike

我正在尝试将一个包含 r 行和 c 列的非常宽的 csv 文件转换为包含 r*c 行和 row_id、col_name、col_value 形式的三列的字典或数据框。由于列数非常大(超过 10,000 个),因此无法手动完成。

假设我从 pandas 数据框开始:

import pandas as pd

df = pd.DataFrame({'id': {0: '1', 1: '2', 2: '3'},
'c1': {0: 'S', 1: 'S', 2: 'D'},
'c2': {0: 'XX', 1: 'WX', 2: 'WX'},
'c3': {0: '32', 1: '63', 2: '32'}})

df = df.set_index('id')

看起来像这样:

    id  c1  c2  c3
0 1 S XX 32
1 2 S WX 63
2 3 D WX 32

请记住,此示例数据框只有三列,但该解决方案需要处理大量列。

目标是将其转换为如下所示的字典或数据框:

    id  key     value
0 1 c1 S
1 1 c2 XX
2 1 c3 32
3 2 c1 S
4 2 c2 WX
5 2 c3 63
6 3 c1 D
7 3 c2 WX
8 3 c3 32

我已经编写了一些东西,通过按列和行从数据帧迭代到新的数据帧来实现所需的输出:

data = []

for i, row in df.iterrows():
for j, column in row.iteritems():
a_dictionary = i, j, column
data.append(a_dictionary)

df_out = pd.DataFrame(data)
df_out.columns = ['id', 'key', 'value']

但是我读到可以而且应该避免在 pandas 和 python 中使用 for 循环。那么正确的解决方案是什么样的?

最佳答案

你可以这样做:

In [212]: df.stack(dropna=False)\
.reset_index(name='Value')\
.rename(columns={'level_1': 'key'})
Out[212]:
id key Value
0 1 c1 S
1 1 c2 XX
2 1 c3 32
3 2 c1 S
4 2 c2 WX
5 2 c3 63
6 3 c1 D
7 3 c2 WX
8 3 c3 32

关于python - 使用 python/pandas 将任意多列转换为键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61397875/

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