gpt4 book ai didi

python - 将包含字典列表的列转换为 Pandas 数据框中的多列

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:05 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框,例如:

pd.DataFrame({'a':[1,2], 'b':[[{'c':1,'d':5},{'c':3, 'd':7}],[{'c':10,'d':50}]]})
Out[2]:
a b
0 1 [{u'c': 1, u'd': 5}, {u'c': 3, u'd': 7}]
1 2 [{u'c': 10, u'd': 50}]

如果 'b' 中有多个元素,我想扩展 'b' 列并重复 'a' 列,如下所示:

Out[2]: 
a c d
0 1 1 5
1 1 3 7
2 2 10 50

我尝试在每一行上使用应用函数但我没有成功,显然应用将一行转换为一行。

最佳答案

您可以使用 concat使用列表理解:

df = pd.concat([pd.DataFrame(x) for x in df['b']], keys=df['a'])
.reset_index(level=1, drop=True).reset_index()

print (df)
a c d
0 1 1 5
1 1 3 7
2 2 10 50

编辑:

如果索引是唯一的,那么可以使用 join对于所有列:

df1 = pd.concat([pd.DataFrame(x) for x in df['b']], keys=df.index)
.reset_index(level=1,drop=True)
df = df.drop('b', axis=1).join(df1).reset_index(drop=True)
print (df)
a c d
0 1 1 5
1 1 3 7
2 2 10 50

我尝试简化解决方案:

l = df['b'].str.len()
df1 = pd.DataFrame(np.concatenate(df['b']).tolist(), index=np.repeat(df.index, l))
df = df.drop('b', axis=1).join(df1).reset_index(drop=True)
print (df)
a c d
0 1 1 5
1 1 3 7
2 2 10 50

关于python - 将包含字典列表的列转换为 Pandas 数据框中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45322552/

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