gpt4 book ai didi

python - 如何有效地复制 pandas 行,仅更改一列?

转载 作者:行者123 更新时间:2023-12-01 00:27:11 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

    v1  v2
0 a A1
1 b A2,A3
2 c B4
3 d A5, B6, B7

我想修改此数据框,以便为 v2 中的每个值复制 v2 列中具有多个值的任何行。以上面的dataframe为例,结果如下:

    v1  v2
0 a A1
1 b A2
2 b A3
3 c B4
4 d A5
5 d B6
6 d B7

我可以使用以下代码来做到这一点:

new_df = pd.DataFrame()
for index, row in df.iterrows():
if len(row["v2"].split(','))>1:
row_base = row
for r in row["v2"].split(','):
row_base["v2"] = r
new_df = new_df.append(row_base, ignore_index=True)
else:
new_df = new_df.append(row)

然而,在大型数据帧上它效率极低,我想学习如何更有效地做到这一点。

最佳答案

Pandas 0.25+ 版本解决方案 Series.str.splitDataFrame.explode :

df = df.assign(v2 = df.v2.str.split(',')).explode('v2').reset_index(drop=True)
print (df)
v1 v2
0 a A1
1 b A2
2 b A3
3 c B4
4 d A5
5 d B6
6 d B7

对于旧版本,numpy 的性能应该会更好:

from itertools import chain

s = df.v2.str.split(',')
lens = s.str.len()
df = pd.DataFrame({
'v1' : df['v1'].values.repeat(lens),
'v2' : list(chain.from_iterable(s.values.tolist()))
})
print (df)
v1 v2
0 a A1
1 b A2
2 b A3
3 c B4
4 d A5
5 d B6
6 d B7

关于python - 如何有效地复制 pandas 行,仅更改一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58482669/

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