仅保留所有值均满足条件的组

时间:2020-07-03 09:59:31

标签: python pandas dataframe pandas-groupby

我正在尝试制作一个df.groupby,并仅将组中所有行的负值行保留在列中。

例如,我有一个这样的数据框

df = pd.DataFrame({'name':['Lucas','Marie','Lucy','Lucas','Marie','Lucas','Phil','Marie','Marie','Lucy','Lucas']})
df['rand'] = np.random.randint(-5, 2, df.shape[0])
df
    name    rand
0   Lucas   -1
1   Marie   -5
2   Lucy    -4
3   Lucas   -2
4   Marie   -1
5   Lucas   -3
6   Phil    0
7   Marie   1
8   Marie   -4
9   Lucy    0
10  Lucas   -1

我正在尝试df.groupby('name')并仅保留其所有值都在df['rand']<0中的那些名称。在这种情况下,我将保留“ Lucas”,因为它是唯一在“ rand”列中具有所有负值的名称。

那么,我的目标输出是:

    name    rand
0   Lucas   -1
3   Lucas   -2
5   Lucas   -3
10  Lucas   -1

通常我会做df= df[df['rand']<0],但从逻辑上讲,它不会在这里完成工作。

我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以先检查下面的/app/publish,然后将布尔序列按WORKDIR /app RUN cp /app/publish /app/ 分组,并用cp: cannot stat '/app/publish/': No such file or directory 进行变换。然后使用结果索引数据框:

0

简化类似情况的一般程序:

  • 应用要满足的条件以一个或多个布尔列结束
  • 原始数据框中的
  • GroupBy分组列
  • transformdf['name'](或all)。我们需要df[df.rand.lt(0).groupby(df.name).transform('all')] name rand 0 Lucas -1 3 Lucas -2 5 Lucas -3 10 Lucas -1 ,因为它保持原始大小
  • 使用结果对df执行boolean indexing