根据每行的最大值/最小值删除 df 中的行

时间:2021-07-20 09:41:41

标签: python pandas dataframe

我有一个很大的 df 例如工人和每个工人一天工作的小时数

<头>
工人 星期一 星期二 星期三
约翰 3 10 10
大卫 2 8 1
克里斯 1 4 2 2
歌尔 1 2 2

我想删除所有至少4小时没有工作的工人的线路(一天无所谓,如果你一天工作4小时,工人会留下来,在这个例子中只有“乔治”将从 df 中删除)

我尝试编写一个函数并尝试使用 lambda 但它没有用,我相信有更简单的方法来做到这一点

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以:

  1. 测试工作时间是否为 greater than 4
  2. 检查 any day of a worker 是否属实
  3. 这为您提供了一个布尔系列,您可以使用它select the rows you want
>>> df[['monday', 'thuesday', 'wedensday']].ge(4).any(axis='columns')
0     True
1     True
2     True
3    False
dtype: bool
>>> df[df[['monday', 'thuesday', 'wedensday']].ge(4).any(axis='columns')]
  worker  monday  thuesday  wedensday
0   John       3        10         10
1  David       2         8          1
2  Chris       1         4          2

答案 1 :(得分:0)

您可以使用布尔索引:

m = (df.loc[:, "monday":] > 3).any(axis=1)
print(df[m])

打印:

  worker  monday  thuesday  wedensday
0   John       3        10         10
1  David       2         8          1
2  Chris       1         4          2