部分值重叠的数据帧合并

2024-10-03 06:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出如何基于数据帧之间的部分值比较来矢量化数据合并:

假设我有一些数据:

df = pd.DataFrame([['Abe', 'AA01', '40'],
                   ['Bill', 'AA02', '42'],
                   ['Carly', 'BB01', '43'],
                   ['Debbie', 'BB02', '44'],
                   ['Edward', '', '45']],
                   columns=['name', 'id', 'age'])

     name    id age
0     Abe  AA01  40
1    Bill  AA02  42
2   Carly  BB01  43
3  Debbie  BB02  44
4  Edward        45

然后我有一些数据包含一些关于ID的元数据:

meta = pd.DataFrame([['AA', 'Alpha Apples'],
                     ['BB', 'Beta Bananas']],
                     columns=['id-prefix', 'group'])

  id-prefix         group
0        AA  Alpha Apples
1        BB  Beta Bananas

所以“组”是由id和id前缀之间的比较决定的。 如何按惯用方式和性能合并这些信息?你知道吗

我写了这样的东西:

df['group'] = ''
for row in meta.values:
    id_prefix, group = row
    df.loc[df.id.str.startswith(id_prefix), 'group'] = group

从而得到正确的数据:

     name    id age         group
0     Abe  AA01  40  Alpha Apples
1    Bill  AA02  42  Alpha Apples
2   Carly  BB01  43  Beta Bananas
3  Debbie  BB02  44  Beta Bananas
4  Edward        45

但它在大型数据帧上的性能不是很好,而且似乎数据帧循环通常是错误的解决方案,因此不鼓励这样做。你知道吗

解决这个问题的更好办法是什么?你知道吗


Tags: 数据alphaiddfprefixgroupbetabill
1条回答
网友
1楼 · 发布于 2024-10-03 06:21:32

这应该比你的方法快。您可以在末尾添加.fillna('')

df['group']=df.id.str[:2].map(meta.set_index('id-prefix')['group'])
df
Out[415]: 
     name    id age         group
0     Abe  AA01  40  Alpha Apples
1    Bill  AA02  42  Alpha Apples
2   Carly  BB01  43  Beta Bananas
3  Debbie  BB02  44  Beta Bananas
4  Edward        45           NaN

相关问题 更多 >