如何合并 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
对问题的措辞表示歉意,但我可以在下面更清楚地说明我的问题。
假设我有以下数据框:
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