如何在熊猫中按两列分组,其中两者的组合是唯一的

时间:2021-04-28 21:05:51

标签: python pandas group-by unique distinct

我有一个由两列组成的数据框,它们在一起是唯一的,我想对其进行分组并能够显示结果。例如:

select Well_ID, Measurement, DateMeasured
from (
  select *,
    row_number() over(partition by Well_ID
                      order by Measurement desc) as rn
  from WellTable
) x
where rn = 1

结果

import pandas as pd

d = {'label': ['A','A','B','B','B','C','E','E'],
     'value': [30,30,40,40,40,0,10,10]}
df = pd.DataFrame(d)
print(df)

注意所有 A 都是 30,B 是 40,等等。
如果我尝试 label value 0 A 30 1 A 30 2 B 40 3 B 40 4 B 40 5 C 0 6 E 10 7 E 10 两者:

groupby

结果为 grouped = df.groupby(['label','value']) print(grouped)

我真的很想去掉数据框中的这些重复行。

我的目标是获得结果数据框:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000208BD8470D0

1 个答案:

答案 0 :(得分:1)

head 可用于获取每个组的前 n 行:

import pandas as pd

d = {'label': ['A', 'A', 'B', 'B', 'B', 'C', 'E', 'E'],
     'value': [30, 30, 40, 40, 40, 0, 10, 10]}
df = pd.DataFrame(d)

print(df.groupby(['label', 'value']).head(1))

drop_duplicates 可用于从整个 DataFrame 中删除重复行:

print(df.drop_duplicates())

两者的输出:

  label  value
0     A     30
2     B     40
5     C      0
6     E     10

假设 df 中还有其他列,并且重复的 'label', 'value' 对是唯一应该被视为可以使用子集标志的值:

import pandas as pd

d = {'label': ['A', 'A', 'B', 'B', 'B', 'C', 'E', 'E'],
     'value': [30, 30, 40, 40, 40, 0, 10, 10],
     'third': [1, 2, 3, 4, 5, 6, 7, 8]}
df = pd.DataFrame(d)

print(df.drop_duplicates(subset=['label', 'value']))

输出:

  label  value  third
0     A     30      1
2     B     40      3
5     C      0      6
6     E     10      7
相关问题