gpt4 book ai didi

python - 如何将字典列表转换为以其中一个值作为列名的 Pandas Dataframe?

转载 作者:行者123 更新时间:2023-12-04 14:51:06 27 4
gpt4 key购买 nike

我有一个数据框,其中一列由字典列表组成,就像这样-

    column1    column2
0 abc [{key1:value_A, key2:value_1}, {key1:value_B, key2:value_2}, {key1:value_C, key2:value_3},...]
.
.
.
n xyz [{key1:value_A, key2:value_4}, {key1:value_B, key2:value_5}, {key1:value_C, key2:value_6},...]

我想将这个数据框转换成这样的东西-

    column1    value_A    value_B    value_C ....
0 abc value_1 value_2 value_3
.
.
.
n xyz value_4 value_5 value_6

什么是快速有效的方法?

您可以使用以下代码片段生成 df -

import pandas as pd
df = pd.DataFrame([[1, [
{'id': 1144801690551941, 'value': 20},
{'id': 8202109018383881, 'value': 26},
{'id': 3025222222235562, 'value': 37},
{'id': 5834245818862827, 'value': 35},
{'id': 4689782481420271, 'value': 27},
{'id': 7385168421196875, 'value': 56},
]], [2, [
{'id': 1144801690551941, 'value': 25},
{'id': 8202109018383881, 'value': 26},
{'id': 3025222222235562, 'value': 38},
{'id': 5834245818862827, 'value': 35},
{'id': 4689782481420271, 'value': 21},
{'id': 7385168421196875, 'value': 53},
]], [3, [
{'id': 1144801690551941, 'value': 20},
{'id': 8202109018383881, 'value': 29},
{'id': 3025222222235562, 'value': 37},
{'id': 5834245818862827, 'value': 32},
{'id': 4689782481420271, 'value': 27},
{'id': 7385168421196875, 'value': 50},
]]], columns=['column1', 'column2'])

哪些结果-

   column1  column2
0 1 [{'id': 1144801690551941, 'value': 20}, {'id':...
1 2 [{'id': 1144801690551941, 'value': 25}, {'id':...
2 3 [{'id': 1144801690551941, 'value': 20}, {'id':...

我期望的输出-

    column1  1144801690551941  8202109018383881  3025222222235562 ...
0 1 20 26 37
1 2 25 26 38
2 3 20 29 37

谢谢!

最佳答案

从 column2 开始,使用 tolist 并重新创建一个数据框,您将其堆叠 以获得一个字典 {'id':...,'value':... } 每行。

s = pd.DataFrame(df['column2'].tolist()).stack()
print(s)
# 0 0 {'id': 1144801690551941, 'value': 20}
# 1 {'id': 8202109018383881, 'value': 26}
# 2 {'id': 3025222222235562, 'value': 37}
# 3 {'id': 5834245818862827, 'value': 35}
# 4 {'id': 4689782481420271, 'value': 27}
# 5 {'id': 7385168421196875, 'value': 56}
# 1 0 {'id': 1144801690551941, 'value': 25}
# 1 {'id': 8202109018383881, 'value': 26}

然后从那里再次使用 tolist 在此 Series s 上并创建一个 Dataframe,确保保留原始索引。附加刚刚使用 set_index 创建的列 ID,然后 unstack 获取所有 ID 编号作为列标题。您获得了 id 值所需的形状。只需要 join 到 column1。

res = (
df[['column1']]
.join(pd.DataFrame(s.tolist(),
s.index.get_level_values(0)) # keep original index
.set_index('id', append=True)
['value'].unstack()
.rename_axis(columns=None))
)

你得到了预期的结果

print(res)
column1 1144801690551941 3025222222235562 4689782481420271 \
0 1 20 37 27
1 2 25 38 21
2 3 20 37 27

5834245818862827 7385168421196875 8202109018383881
0 35 56 26
1 35 53 26
2 32 50 29

关于python - 如何将字典列表转换为以其中一个值作为列名的 Pandas Dataframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69093536/

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