gpt4 book ai didi

python - 如何扩展在 Python Pandas 中存储为单个值的可迭代对象? (又名反向分组)

转载 作者:行者123 更新时间:2023-12-04 07:13:55 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to unnest (explode) a column in a pandas DataFrame?

(16 个回答)


5 天前关闭。




我有以下数据帧:

Index Letter Numbers
1 A [1, 11]
2 B [2, 22]
3 C [3, 33]
我想“扩展”数字列表,以便每个数字都有自己的行,如下所示:
Index Letter Numbers
1 A 1
2 A 11
3 B 2
4 B 22
5 C 3
6 C 33
我试图通过使用以下代码来实现这一点:
import pandas as pd

df = pd.DataFrame({
'Letter': ['A', 'B', 'C'],
'Numbers': [[1, 11], [2, 22], [3, 33]]
})

for i, row in df.iterrows():
for num in row['Numbers']:
new_row = row.copy()
new_row['Numbers'] = num
df = df.append(new_row, ignore_index=True)

df = df.loc[df.apply(lambda x: type(x['Numbers']) != list, axis=1)]
它适用于示例,但在更大的 DataFrame(例如几十万行)中需要很多时间。有没有更好、更优化的方法来做到这一点?我尝试使用 apply 方法,但由于某种原因它清除了我的 DataFrame ......

最佳答案

使用 explode垂直扩展值:

>>> df.explode('Numbers', ignore_index=True)

Letter Numbers
0 A 1
1 A 11
2 B 2
3 B 22
4 C 3
5 C 33
使用 apply(pd.Series ) 水平扩展值:

>>> df.join(df['Numbers'].apply(pd.Series)
.add_prefix('Numbers_')) \
.drop(columns='Numbers')

Letter Numbers_0 Numbers_1
0 A 1 11
1 B 2 22
2 C 3 33

关于python - 如何扩展在 Python Pandas 中存储为单个值的可迭代对象? (又名反向分组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68896190/

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