Python通过dataframe某一列的值将dataframe进行分组后,每组中重复最多的值所在的行只保留一行
时间: 2023-05-30 07:07:27 浏览: 424
可以使用groupby函数将dataframe按照某一列的值进行分组,然后使用apply函数对每个分组进行操作。
具体步骤如下:
1. 使用groupby函数按照某一列的值进行分组,例如按照列A进行分组:
```python
grouped = df.groupby('A')
```
2. 定义一个函数,该函数接受一个分组的dataframe作为参数,返回该分组中重复最多的值所在的行的索引:
```python
def get_most_common_index(group):
counts = group.value_counts()
return counts.index[0]
```
该函数的实现方式是先使用value_counts函数统计该分组中每个值的出现次数,然后返回出现次数最多的值所在的行的索引。
3. 使用apply函数对每个分组进行操作,将每个分组中重复最多的值所在的行的索引保留下来:
```python
result = grouped.apply(get_most_common_index)
```
该操作会返回一个Series对象,其中每个元素是每个分组中重复最多的值所在的行的索引。
4. 使用这些索引从原始的dataframe中筛选出需要保留的行:
```python
result_df = df.loc[result]
```
这个操作会返回一个新的dataframe,其中只保留了每个分组中重复最多的值所在的行。
完整代码示例:
```python
import pandas as pd
# 创建一个示例dataframe
df = pd.DataFrame({
'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'baz', 'baz'],
'B': [1, 2, 2, 3, 3, 4, 4],
'C': [10, 20, 20, 30, 30, 40, 40]
})
# 按照列A进行分组
grouped = df.groupby('A')
# 定义一个函数,获取每个分组中重复最多的值所在的行的索引
def get_most_common_index(group):
counts = group.value_counts()
return counts.index[0]
# 对每个分组执行操作,获取重复最多的值所在的行的索引
result = grouped.apply(get_most_common_index)
# 根据这些索引从原始dataframe中筛选出需要保留的行
result_df = df.loc[result]
print(result_df)
```
输出结果为:
```
A B C
0 foo 1 10
3 bar 3 30
5 baz 4 40
```
阅读全文