【发布时间】:2018-02-06 04:56:20
【问题描述】:
从下面的数据框中,如何在不借助复制/粘贴或中间数据结构的情况下获得拥有两只以上宠物的所有者列表?
df = pd.DataFrame([['Jack', 'fuzzy',12], ['Jack', 'furry',13], ['Joe', 'scratchy',3], ['Jack', 'chirpy',40], ['Jeff', 'slithery',9], ['Jack', 'swimmy',1], ['Joe', 'feathery',14], ['Joe', 'oinky',11], ['Jack', 'stampy',1]],
columns=['Owner', 'Pet', 'Age'])
print(df)
Owner Pet Age
0 Jack fuzzy 12
1 Jack furry 13
2 Joe scratchy 3
3 Jack chirpy 40
4 Jeff slithery 9
5 Jack swimmy 1
6 Joe feathery 14
7 Joe oinky 11
8 Jack stampy 1
得到一个符合条件的布尔序列很容易:
df.groupby('Owner').count()['Pet']>2
Owner
Jack True
Jeff False
Joe True
Name: Pet, dtype: bool
实际上提取匹配项(Jack 和 Joe)可以通过复制粘贴 groupby 语句来完成:
df.groupby('Owner').count()['Pet'][df.groupby('Owner').count()['Pet']>2]
Owner
Jack 5
Joe 3
Name: Pet, dtype: int64
但如果条件语句很长,这会很痛苦,因为每次更改都需要重复。到目前为止发现的唯一另一种方法是将系列放回数据框并使用query(),但这感觉不太可能:
pd.DataFrame(df.groupby('Owner').count()['Pet']).query('Pet > 2')
Pet
Owner
Jack 5
Joe 3
还有比这些更好的方法吗?
【问题讨论】:
-
避免在 cmets 中回答问题。
-
您的意思是复制您不想只是将结果分配给变量并对其进行处理?
-
@MedAli 通过复制/粘贴我的意思是这个字符串:
df.groupby('Owner').count()['Pet'] -
感觉你是在夸大问题。您可以分配给另一个变量并对其进行处理
df1= df.groupby('Owner').count()['Pet']
标签: python-3.x pandas dataframe series pandas-groupby