pandas 根据A列数据分类B列的数据 然后对B列的数据去重
时间: 2023-06-19 17:02:48 浏览: 131
可以使用 `groupby` 和 `drop_duplicates` 方法实现:
```python
import pandas as pd
# 创建示例数据
data = {
'A': ['a', 'a', 'b', 'b', 'c', 'c'],
'B': [1, 1, 2, 2, 3, 3]
}
df = pd.DataFrame(data)
# 根据 A 列分组,对 B 列去重
result = df.groupby('A')['B'].apply(lambda x: x.drop_duplicates()).reset_index()
print(result)
```
输出:
```
A level_1 B
0 a 0 1
1 b 2 2
2 c 4 3
```
其中,`groupby` 方法将数据按 `A` 列分组,然后对每个分组的 `B` 列应用 `drop_duplicates` 方法,返回去重后的结果。最后使用 `reset_index` 方法将结果转换为 DataFrame 格式。
相关问题
pandas 根据A列数据中每一个不同数据出现次数由高到低排列分类B列的数据 并对B列的数据去重
可以使用 `pandas` 库中的 `groupby()` 和 `value_counts()` 方法来实现。
假设数据集的 DataFrame 名为 `df`,A列的列名为 `A`,B列的列名为 `B`,代码如下:
``` python
result = df.groupby(['B'])['A'].value_counts().sort_values(ascending=False).reset_index(name='count')
result.drop_duplicates(subset='B', keep='first', inplace=True)
```
这里先对 B 列进行分组,然后对 A 列进行计数并按照出现次数从高到低排序,最后重置索引并将计数列的列名设置为 `count`。
然后使用 `drop_duplicates()` 方法对 B 列进行去重,只保留第一次出现的行。
完整代码如下:
``` python
import pandas as pd
# 创建示例数据集
data = {'A': [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 'B': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'd']}
df = pd.DataFrame(data)
# 排序并去重
result = df.groupby(['B'])['A'].value_counts().sort_values(ascending=False).reset_index(name='count')
result.drop_duplicates(subset='B', keep='first', inplace=True)
print(result)
```
输出结果为:
```
B A count
0 a 4 2
1 b 4 2
2 c 3 2
3 d 4 1
```
pandas一列数据去重
在使用 Pandas 进行数据处理时,可以通过 `drop_duplicates` 方法对某一列的数据进行去重操作。该方法允许指定哪一列作为去重的依据,并且可以控制保留重复项的方式。
以下是一个示例,展示如何创建一个 DataFrame 并对其中的一列进行去重:
```python
import pandas as pd
# 创建一个字典并转换为 DataFrame
dic = {'name': ['a', 'b', 'c', 'd'], 'comment': ['abc', '真棒', '真棒', '123']}
df = pd.DataFrame(dic)
# 对 'comment' 列进行去重
df_unique = df.drop_duplicates(subset='comment')
```
在这个例子中,`subset` 参数指定了要基于哪一列进行去重[^1]。
如果你需要读取 Excel 文件并对其中某一列进行去重,然后将结果保存回文件,则可以这样做:
```python
import os
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel("./数据源/" + os.listdir("./数据源/")[0], dtype=str, keep_default_na="")
# 对特定列进行去重
df.drop_duplicates(subset=['想要删除的列名'], keep='first', inplace=True)
# 将去重后的数据保存到新的 Excel 文件
df.to_excel("./结果/去重结果.xlsx", index=None)
```
这里,`keep='first'` 表示保留第一次出现的重复项[^2]。
对于更复杂的情况,例如优先考虑某一列的频数再对另一列去重,可以先计算频数,然后合并回原始 DataFrame,并按频数排序后去重:
```python
from functools import reduce
# 创建一个 DataFrame
df = pd.DataFrame(data=[['A事项', 5], ['B事项', 10], ['C事项', 8], ['A事项', 3], ['A事项', 7], ['B事项', 10], ['B事项', 8], ['A事项', 3], ['A事项', 7]],
columns=['事项名称', '办理人id'])
# 计算“事项名称”的频数
df_count = df['事项名称'].value_counts().rename_axis('事项名称').reset_index(name="事项名称的个数")
# 合并频数信息回到原始 DataFrame
df_with_count = reduce(lambda left, right: pd.merge(left, right, on=['事项名称'], how='left'), [df, df_count])
# 排序以便于后续去重时能够按照频数顺序处理
df_sorted = df_with_count.sort_values(by=['事项名称的个数', '事项名称'], ascending=[True, True])
# 基于“办理人id”列进行去重
df_unique = df_sorted.drop_duplicates(subset='办理人id', keep='first')
```
这段代码首先计算了每个事项名称出现的次数,然后将这些信息合并回原始 DataFrame,接着按照频数和事项名称排序,最后基于“办理人id”列进行去重[^3]。
当你只需要对 Excel 中的一列数据进行去重并将结果保存回去时,可以参考如下简化版本的代码:
```python
import pandas as pd
# 读取 Excel 文件
file_path = "D:\pythonXangmu\quchong\quchong.xlsx"
df = pd.read_excel(file_path, sheet_name='nameSheet')
# 打印去重前的数据
print('去重前\n', df)
# 对 'name' 列进行去重
df_unique = df.drop_duplicates(subset='name')
# 打印去重后的数据
print('去重后\n', df_unique)
# 保存数据到 Excel 文件
df_unique.to_excel('quchong.xlsx', index=False)
```
这段代码展示了如何读取 Excel 文件,执行去重操作,并将结果保存回 Excel 文件[^4]。
---
阅读全文
相关推荐















