【问题标题】:Pandas count column a if column b condition熊猫计数列 a 如果列 b 条件
【发布时间】:2022-01-06 09:22:47
【问题描述】:

我有一个包含两列的数据框,如下所示。

location   date
paris       6    
paris       4    
rome        3    
paris       5    
paris       6    
rome        6    
paris       4

现在我想计算 a 列中的不同区域,如果 b 列等于 6。 所以想要的结果是:

巴黎 2

罗马 1

我是个菜鸟,基本思路是:如果“日期”列是 6,则计算列位置中的值。

感谢任何帮助。

【问题讨论】:

    标签: pandas conditional-statements


    【解决方案1】:

    假设您的数据框是df

    df[df['date'] == 6]['location'].value_counts()
    

    会给你想要的结果:

    paris    2
    rome     1
    Name: location, dtype: int64
    

    【讨论】:

    • 非常感谢!太棒了。此外,如果列日期中的值是例如,你能告诉我这将如何工作吗? “a”和“b”,那么非数字吗?
    • @skzy 当然,在这种情况下,您只需更改 == 比较器,例如 df['date'] == 'a' 即可。
    【解决方案2】:

    应该是这样的:

    df[df['date']==6].groupby('location').count()
    

    df[df['date']==6] 部分将您的 DataFrame 过滤为仅包含日期值等于 6 的行。groupby('location') 按位置值对过滤后的 DataFrame 进行分组,count() 计算分组中的行数。

    【讨论】:

    • 酷,这也有效。如果列日期改为时间,您是否知道如何做完全相同的事情?格式是这样的:19:23:07。假设如果时间早于 18:00:00,我想计算所有位置。
    • compare a datetime column only to time in pandas 中有关于时间列的很好的讨论,但总而言之,您可以先使用df['data'] = pd.to_datetime(df.date, format='%H:%M:%S'),然后通过df[df['date']<'18:00:00'] 过滤您的DataFrame。
    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2018-01-01
    • 2021-10-18
    相关资源
    最近更新 更多