首页 > 解决方案 > Pandas - 组合具有相似值的行(名称拼写变化)

问题描述

我有以下 Python Pandas 数据框:

   名称 销售数量
0 约翰·巴恩斯 10
1约翰巴恩斯5
2约翰巴恩斯4
3 彼得 K. 4
4彼得K 6
5彼得克莱默5
6查尔斯3
7 查尔斯 2
8朱莉摩尔3
9朱莉摩尔7
10

还有更多,具有相同的名称拼写变化。

我想将具有相似值的行组合起来,这样我就有了以下数据框:

  名称 销售数量
0约翰巴尼斯19
1彼得克莱默15
2查尔斯5
3朱莉摩尔10

还有很多

我应该怎么做?

标签: pythonpandasdataframerows

解决方案


正如您在评论中看到的那样,要求很模糊,但据我所知,我已经列出了总数。我通过将名称小写并删除句点来计算总数,并将其转换为大写str.title()

import pandas as pd
import io

data = '''
 Name Sales
0 "JOHN BARNES" 10
1 "John Barnes" 5
2 "John barnes" 4
3 "Peter K." 4
4 "Peter K" 6
5 "Peter Krammer" 5
6 "Charles"  3
7 "CHARLES"  2
8 "Julie Moore" 3
9 "Julie moore" 7
'''

df = pd.read_csv(io.StringIO(data), sep='\s+')
df['lower'] = df['Name'].str.lower()
df['lower'] = df['lower'].str.replace('.','')
new = df.groupby('lower')['Sales'].sum().reset_index()
new['lower'] = new['lower'].str.title()

new
    lower   Sales
0   Charles 5
1   John Barnes 19
2   Julie Moore 10
3   Peter K 10
4   Peter Krammer   5

推荐阅读