如何合并 pandas 数据框中的行,这些行在一列中具有相似的值以生成它们的值的平均值?

How can I combine rows in a pandas dataframe that have similar values in one column to produce the mean of their values?

对问题的措辞表示歉意,但我可以在下面更清楚地说明我的问题。

假设我有以下数据框:

Region Value
London North 8
North Yorkshire 4
London South 6
South Yorkshire 6

如何合并伦敦行和约克郡行并生成它们的平均值?

(这是我正在使用的数据框的简化示例,其中包含大约 3000 行。)

我想获取以下数据框:

Wider Region Avg. Value
London 7
Yorkshire 5

根据所有数据的值、过程和许多其他原因,可以采取多种方法来解决这个问题。如果您可以识别所有 exclude_words

,这是一种直接的方法
exclude_words = ['North', 'South']
df['Wider Region'] = df['Region'].replace(exclude_words, '', regex=True).str.strip()
df.groupby('Wider Region', as_index=False).mean()
Out[1]: 
  Wider Region  Value
0       London      7
1    Yorkshire      5

您可以使用这行代码来帮助您找到 exclude_words:

df['Region'].str.split().explode().unique()

Out[1]:
array(['London', 'North', 'Yorkshire', 'South'], dtype=object)

从那里,您只需确定可以排除的词,以便进行分组。

一种方法是定义伦敦约克郡(或其他城市)的构成要素,因为它们具有前导前缀或后缀,例如如 'North'、'South' 等

例如:

my_territories = ['London','Yorkshire']
df['territories'] = df.apply(lambda x: [t for t in my_territories if t in x['Region']][0], axis=1)

这将导致:

    Region          Value   territories
0   London North    8       London
1   North Yorkshire 4       Yorkshire
2   London South    6       London
3   South Yorkshire 6       Yorkshire

df.groupby(['territories'])['Value'].mean().reset_index()

将return想要的结果:

    territories Value
0   London      7
1   Yorkshire   5