簡體   English   中英

如何在 pandas 中按兩列分組,其中兩者的組合是唯一的

[英]How to group by two columns in pandas where the combination of the two is unique

我有一個 dataframe 兩列是唯一的,我想分組並能夠顯示結果。 例如:

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)

結果是

  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

注意所有 A 是 30,B 是 40,等等。
如果我嘗試對兩者進行groupby

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

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

我真的很想擺脫 dataframe 中的這些重復行。

我的目標是得到結果 dataframe:

  label  value
1     A     30
2     B     40
3     C      0
4     E     10

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())

Output 對於兩者:

  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']))

Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM