gpt4 book ai didi

python - 将数据框与列中的数组合并

转载 作者:行者123 更新时间:2023-11-30 22:06:43 26 4
gpt4 key购买 nike

pandas中,如何合并两个数据集以使列中包含的数组连接起来?

例如,让d1d2两个数据集进行合并。就我而言,我有大约 100 个相对较小的数据框需要合并:

>> d1  
id seq
0 AAA (1, 2, 3, 4)
1 BBB (1, 2, 3, 4) <---

>> d2
id seq
0 CCC (1, 2, 3, 4)
1 DDD (1, 2, 3, 4)
2 BBB (5, 6, 7) <---

现在我们想要:

>> df
id seq
AAA (1, 2, 3, 4)
BBB (1, 2, 3, 4, 5, 6, 7) <---
DDD (1, 2, 3, 4)
CCC (1, 2, 3, 4)

如何有效地做到这一点?

我尝试合并,但似乎我不得不通过我想避免的方法apply

最佳答案

不要在 DataFrame 中使用元组/列表/字典,因为在 pandas 函数中丢失了向量化。

如果seq列中元组的解决方案:

dfs = [df1, df2]
df = pd.concat(dfs).groupby('ip')['seq']
.apply(lambda x: tuple([z for y in x for z in y]))
.reset_index()
print (df)
ip seq
0 110.11.1.5 (1, 2, 3, 4, 5, 6, 7)
1 115.65.20.1 (1, 2, 3, 4)
2 118.11.1.5 (1, 2, 3, 4)
3 55.65.85.1 (1, 2, 3, 4)

扁平化的性能会更好一些:

dfs = [df1, df2] * 50

In [57]: %timeit pd.concat(dfs).groupby('ip',as_index=False).seq.sum()
15.7 ms ± 452 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [58]: %timeit pd.concat(dfs).groupby('ip')['seq'].apply(lambda x: tuple([z for y in x for z in y])).reset_index()
7.86 ms ± 72.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python - 将数据框与列中的数组合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648664/

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