【问题标题】:Python Dataframe delete rows which have more than 10 occurrences of a specific valuePython Dataframe删除特定值出现超过10次的行
【发布时间】:2019-05-06 19:37:41
【问题描述】:

我有以下数据(只是简单的图片,数字继续):

import pandas as pd
df = pd.DataFrame({'Flight Day': ['2018-10-01', '2018-10-01','2018-10-01', '2018-10-01', '2018-10-02','2018-10-02', '2018-10-02', '2018-10-02', '2018-10-03','2018-10-03','2018-10-03','2018-10-03'], 
               'Flight Number': ['CA1336', 'CA1332', 'CA1472', 'CA1473', 'CA1355', 'CA1331', 'CA1666', 'CA1665', 'CA1366', 'CA1337', 'CA1489', 'CA1667'],
               'STD Departure': [10, 15, 8, 11,10, 15, 8, 14,10, 15, 8, 11], 
               'Bircher': [2, 4, 8, 4,3, 2, 3, 1,5, 5, 2, 1],
               'Carac': [2, 4, 8, 4,2, 2, 3, 4,2, 5, 2, 1]})

我只想保留最后 10 次出现的相同“航班号”和“STD 出发”,并删除最后 10 次出现之前的行。例如,在我有最后 10 行已经符合条件之前删除 LX1336(航班号)10(STD 出发)的行,因此有 LX1336(航班号)10(STD 出发)。 我在 CSV 文档中有所有航班号,如果有帮助,STD 出发总是从 0 到 23。 这个问题是否有简短而清晰的代码? 非常感谢您的帮助!

【问题讨论】:

  • 提供文本代码,而不是图片
  • 飞行日航班号 STD 出发 Bircher Carac 2018-10-01 00:00:00 LX1336 10 2 2018-10-01 00:00:00 LX1337 15 1 2018-10-01 00:00 :00 LX1472 8 1 2018-10-01 00:00:00 LX1473 10 2 2018-10-02 00:00:00 LX1336 12 1 2018-10-02 00:00:00 LX1337 16 1
  • 请提供minimal 示例。也请通过this
  • 对不起,我显然是新来的 :)
  • 我刚刚添加了一个小例子

标签: python python-3.x pandas dataframe slice


【解决方案1】:

您可以为此使用GroupBy.head

df.groupby(['Flight Number','STD Departure']).head(10)

编辑

如果您想要最后 10 个,只需使用 GroupBy.tail,就像 @jondiedoop 建议的那样:

df.groupby(['Flight Number','STD Departure']).tail(10)

【讨论】:

  • 谢谢。我只是注意到我实际上想保留最后 10 个。我应该过滤还是有 .bottom 的代码?
  • 已编辑。正如@Jondiedoop 所说,只需使用.tail() 而不是.head()
  • 如果对你有帮助请不要忘记采纳答案
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2016-01-09
  • 1970-01-01
  • 2012-09-14
  • 2016-10-04
  • 1970-01-01
相关资源
最近更新 更多