使用 pd.BooleanSeries 过滤 groupby 的结果

问题描述 投票:0回答:1

考虑让两个数据框共享一列。

df = pd.DataFrame([{'a': 1, 'b':2}, {'a':2, 'b': 4}])
df2 = pd.DataFrame([{'a': 1, 'c':2}, {'a': 1, 'c':3}, {'a':2, 'c': 4}, {'a': 2, 'c':5}])
grouped_df = df2.groupby('a')

我使用第一个来获取一些索引,我想用它们来过滤 groupby 之后的第二个数据帧:

my_indexes = df['a']==1

grouped_df
的长度与
my_indexes
相同。

如何使用

my_indexes
来过滤
df2
? 我已经尝试过
grouped_df[my_indexes]
但它不适用于 groupby 结果,并且
apply
transform
想要一个可调用的。

python pandas dataframe filter group-by
1个回答
0
投票

首先根据

df2
中满足条件
df['a']
的值过滤
df['a'] == 1
,然后对过滤后的df执行groupby操作。基本上:

import pandas as pd

df = pd.DataFrame([{'a': 1, 'b': 2}, {'a': 2, 'b': 4}])
df2 = pd.DataFrame([{'a': 1, 'c': 2}, {'a': 1, 'c': 3}, {'a': 2, 'c': 4}, {'a': 2, 'c': 5}])

values_of_interest = df[df['a'] == 1]['a']

filtered_df2 = df2[df2['a'].isin(values_of_interest)]
grouped_df = filtered_df2.groupby('a')

举个例子:


for name, group in grouped_df:
    print(f'Group: {name}')
    print(group)

这给出了

Group: 1
   a  c
0  1  2
1  1  3
© www.soinside.com 2019 - 2024. All rights reserved.