【问题标题】:How to filter the groupby dataframe in a multiindexed data如何过滤多索引数据中的 groupby 数据框
【发布时间】:2022-09-27 20:46:41
【问题描述】:
我有一个这样的数据框:
df:
ID Group Score1
1 A 45
2 A 12
3 B 33
3 C 64
. . .
. . .
15000 . .
有数千个重复的 ID,总共 15 个组。
对于每个组,我想显示
- 大于或等于中值的唯一 ID 数
- 大于 40 分的唯一 ID 数
- 分数列第一个四分位数(0-25 个百分位范围)以下的唯一 ID 数
- 得分列第三个四分位数(第 75 - 100 个百分位数范围)以上的唯一 ID 数
所以我的输出看起来像这样:
输出:
Group No of unique No of unique No of unique No of unique
IDs >= Median IDs > 40 IDs below IDs above the
first quartile third quartile
A 56 25 17 45
B 33 78 28 62
C 23 36 38 33
.
.
P 39 28 26 41
谁能帮我这个?
非常感谢!
标签:
python
python-3.x
pandas
dataframe
【解决方案1】:
希望这有效。首先,我首先在原始数据框中创建了四个相应的列。然后创建df1,这是具有唯一ID 的数据框df。最后,使用 pd.groupby() 您可以创建所需的输出:
df = pd.DataFrame({'ID': list(range(100)),
'Group': list('ABCDE')*20,
'Score1': np.random.randint(10, 99, 100)})
df['No of unique IDs >= Median'] = df.Score1 >= df.Score1.median()
df['No of unique IDs > 40'] = df.Score1 > 40
df['No of unique IDs < first quartile'] = df.Score1 < df.Score1.quantile(0.25)
df['No of unique IDs > third quartile'] = df.Score1 > df.Score1.quantile(0.75)
df1 = df.groupby(['ID', 'Group']).any().reset_index()
df1.groupby('Group').agg({'No of unique IDs >= Median': 'sum',
'No of unique IDs > 40': 'sum',
'No of unique IDs < first quartile': 'sum',
'No of unique IDs > third quartile': 'sum'})