【问题标题】:Give count for column values python pandas计算列值python pandas
【发布时间】:2017-10-21 23:56:31
【问题描述】:

提前道歉,我无法创建代码来生成示例数据。

这是我的数据框,B、C、D、E 列有约会日期。我正在尝试计算每行存在的日期数并将该数字附加到 G 列而不干扰 A 列和 F 列。我需要一个函数吗?值的真/假然后计数?有没有简单的方法?

    A       B           C           D           E           F           G   
0   1       20171021    20171021    20171021    20171021    id_123  
1   2       NaN         20171021    20171021    20171021    id_234  
2   3       NaN         NaN         20171021    20171021    id_345
3   4       NaN         NaN         NaN         20171021    id_456

期望的输出

    A       B           C           D           E           F           G   
0   1       20171021    20171021    20171021    20171021    id_123      4
1   2       NaN         20171021    20171021    20171021    id_234      3
2   3       NaN         NaN         20171021    20171021    id_345      2
3   4       NaN         NaN         NaN         20171021    id_456      1

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    基本上,使用count。

    cnt = df[['B', 'C', 'D', 'E']].count(axis=1)
    print(cnt) 
    0    4
    1    3
    2    2
    3    1
    dtype: int64
    
    df['G'] = cnt
    

    【讨论】:

    • 可能是我想太多了
    • @Bharathshetty 你做到了,但列切片是一个不错的选择,我喜欢它。会投票,给我一秒钟:)
    • 它的灵感来自于你 :)
    • 谢谢,这是一个非常有效的解决方案,效果很好!
    【解决方案2】:

    您可以对非空值求和,即.notnull() 将给出布尔掩码。布尔掩码的总和给出计数。

    df['G'] = df.loc[:,'B':'E'].notnull().sum(1) 
    
    A B C D E F G 0 1 20171021.0 20171021.0 20171021.0 20171021 id_123 4 1 2 NaN 20171021.0 20171021.0 20171021 id_234 3 2 3 NaN NaN 20171021.0 20171021 id_345 2 3 4 NaN NaN NaN 20171021 id_456 1

    【讨论】:

    • 谢谢!这就是我正在寻找的真/假,下次我会记住“布尔掩码”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2020-03-12
    • 2017-10-22
    • 2018-10-28
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多