如何按 pandas 中的两列分组,其中两者的组合是唯一的
How to group by two columns in pandas where the combination of the two is unique
我有一个由两列组成的数据框,它们加在一起是唯一的,我想对其进行分组并能够显示结果。例如:
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
。
我真的很想删除数据框中的这些重复行。
我的目标是获得结果数据框:
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())
两者的输出:
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
我有一个由两列组成的数据框,它们加在一起是唯一的,我想对其进行分组并能够显示结果。例如:
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
。
我真的很想删除数据框中的这些重复行。
我的目标是获得结果数据框:
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())
两者的输出:
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