Python 如何使用类似行名称上的Pandas来识别模式

Python 如何使用类似行名称上的Pandas来识别模式,python,pandas,Python,Pandas,我正在导入一个具有类似供应商名称的excel文件,并使用agg函数添加支出,然后使用排序函数对支出进行排序。最终,这个数据帧被输入到一个动态Bokeh图中。 由于文本格式的原因,我的供应商名称存在细微的差异,我的pandas数据框在添加支出时无法识别这种模式。尽管它是同一家供应商,但我并没有得到关于支出的整体看法,只是缺少了一些数据,最终没有在博克图中计算出来 资料 预期结果 所有数据加起来应该是460。在尝试求和之前,您可以处理标点符号、空格和大写与小写,但这将更改输出中供应商的名称: df.

我正在导入一个具有类似供应商名称的excel文件,并使用agg函数添加支出,然后使用排序函数对支出进行排序。最终,这个数据帧被输入到一个动态Bokeh图中。 由于文本格式的原因,我的供应商名称存在细微的差异,我的pandas数据框在添加支出时无法识别这种模式。尽管它是同一家供应商,但我并没有得到关于支出的整体看法,只是缺少了一些数据,最终没有在博克图中计算出来

资料 预期结果
所有数据加起来应该是460。

在尝试求和之前,您可以处理标点符号、空格和大写与小写,但这将更改输出中供应商的名称:

df.groupby([x.upper().replace(' ', '').replace(',','').replace('.','') for x in df['Vendor']])['Spend'].sum()

ABCINC    460
ABCINC    460
您还可以在调用groupby之前就地修改列名:

df['Vendor'] = df['Vendor'].str.upper().str.replace(' ', '').str.replace(',','').str.replace('.','')
print(df.groupby('Vendor')['Spend'].sum())
df现在看起来像:

   Vendor Site  Spend
0  ABCINC    A    300
1  ABCINC    B    100
2  ABCINC    C     50
3  ABCINC    D     10
以及输出:

df.groupby([x.upper().replace(' ', '').replace(',','').replace('.','') for x in df['Vendor']])['Spend'].sum()

ABCINC    460
ABCINC    460

在一天结束的时候,即使上面写着“abc公司”,加上所有必要的数据,这也没关系。我很好。