首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据格式与列中的数组合并

将数据格式与列中的数组合并
EN

Stack Overflow用户
提问于 2018-10-04 14:00:14
回答 2查看 28关注 0票数 1

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

例如,让d1d2两个数据集合并。在我的例子中,我有大约100个相对较小的数据文件要合并:

代码语言:javascript
复制
>> 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) <---

现在我们要:

代码语言:javascript
复制
>> 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方法,这是我想要避免的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-04 14:05:46

不要在DataFrame中使用元组/列表/dicts,因为在熊猫函数中丢失了矢量化。

seq列中的解决方案if元组:

代码语言:javascript
复制
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)

使用扁平化的性能要好一些:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2018-10-04 14:07:01

IIUC

代码语言:javascript
复制
pd.concat([df1,df2]).groupby('id',as_index=False).seq.sum()
Out[860]: 
  id                 seq
0  A        (1, 2, 3, 4)
1  B  (1, 2, 3, 4, 5, 6, 7)
2  C        (1, 2, 3, 4)
3  D        (1, 2, 3, 4)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52648664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档