从 Pandas 数据框中删除值出现不止一次的行
Remove rows from Pandas dataframe where values appears more than once
我有一个数据框:
ID EM_results pa_id_1850
0 0 1
1 1 1
2 0 1
3 0 2
4 0 2
5 1 3
6 1 3
7 0 3
我想删除所有出现 EM_results 的行,因为每个 pa_id_1850 索引不止一次出现 1 行。在这种情况下:
ID EM_results pa_id_1850
0 0 1
1 1 1
2 0 1
3 0 2
4 0 2
我试过类似的东西:
grouped = df.groupby('pa_id_1850')
grouped.filter(lambda x: (x['EM_results'] == 1) <= 1)
但我不能完全让它工作
在 transform
的帮助下计算布尔掩码,然后将其应用于数据框。
>>> mask = df.groupby('pa_id_1850')['EM_results'].transform('sum').le(1)
>>> df = df[mask]
>>> df
ID EM_results pa_id_1850
0 0 0 1
1 1 1 1
2 2 0 1
3 3 0 2
4 4 0 2
您的尝试很接近:filter
需要 return 标量,而不是系列。实现此目的的一种方法是过滤每组中 EM_results
值的总和,假设这些值仅是 0 或 1:
grouped = df.groupby('pa_id_1850')
grouped.filter(lambda x: (x['EM_results'].sum()) <= 1)
# Output:
ID EM_results pa_id_1850
0 0 0 1
1 1 1 1
2 2 0 1
3 3 0 2
4 4 0 2
我有一个数据框:
ID EM_results pa_id_1850
0 0 1
1 1 1
2 0 1
3 0 2
4 0 2
5 1 3
6 1 3
7 0 3
我想删除所有出现 EM_results 的行,因为每个 pa_id_1850 索引不止一次出现 1 行。在这种情况下:
ID EM_results pa_id_1850
0 0 1
1 1 1
2 0 1
3 0 2
4 0 2
我试过类似的东西:
grouped = df.groupby('pa_id_1850')
grouped.filter(lambda x: (x['EM_results'] == 1) <= 1)
但我不能完全让它工作
在 transform
的帮助下计算布尔掩码,然后将其应用于数据框。
>>> mask = df.groupby('pa_id_1850')['EM_results'].transform('sum').le(1)
>>> df = df[mask]
>>> df
ID EM_results pa_id_1850
0 0 0 1
1 1 1 1
2 2 0 1
3 3 0 2
4 4 0 2
您的尝试很接近:filter
需要 return 标量,而不是系列。实现此目的的一种方法是过滤每组中 EM_results
值的总和,假设这些值仅是 0 或 1:
grouped = df.groupby('pa_id_1850')
grouped.filter(lambda x: (x['EM_results'].sum()) <= 1)
# Output:
ID EM_results pa_id_1850
0 0 0 1
1 1 1 1
2 2 0 1
3 3 0 2
4 4 0 2