【问题标题】:Python Pandas - Produce a sum total of a column that either has a value '1' in it or NaNPython Pandas - 产生一个列的总和,该列的值要么是“1”,要么是 NaN
【发布时间】:2020-08-22 03:19:22
【问题描述】:

我有一个看起来像这样的数据框

Opened              Closed              Resolved                   07:01 - 09:00    09:01 - 11:00   11:01 - 13:00   
2020-04-14 14:45:58 2020-04-14 15:04:22 0 days 00:18:24.000000000                                   1   
2020-04-14 13:43:28 2020-04-14 14:12:22 0 days 00:28:54.000000000                   1   
2020-04-14 13:41:18 2020-04-14 14:12:28 0 days 00:31:10.000000000                   1   
2020-04-14 10:57:53 2020-04-14 11:24:58 0 days 00:27:05.000000000       1           
2020-04-14 09:18:14 2020-04-14 09:44:04 0 days 00:25:50.000000000       1           
2020-04-14 09:16:28 2020-04-14 09:31:12 0 days 00:14:44.000000000       1           
2020-04-13 22:56:09 2020-04-14 00:39:30 0 days 01:43:21.000000000                   
2020-04-13 20:10:31 2020-04-13 20:26:25 0 days 00:15:54.000000000                   
2020-04-13 08:29:38 2020-04-13 18:29:25 0 days 09:59:47.000000000       1               
2020-04-09 14:04:14 2020-04-09 15:31:01 0 days 01:26:47.000000000                   1   
2020-04-09 10:06:24 2020-04-09 10:33:39 0 days 00:27:15.000000000       1           
2020-04-08 21:38:13 2020-04-09 07:01:30 0 days 09:23:17.000000000                   
2020-04-08 15:51:41 2020-04-08 16:08:02 0 days 00:16:21.000000000                                   1
2020-04-08 15:50:09 2020-04-08 16:07:57 0 days 00:17:48.000000000                                   1
2020-04-08 15:48:38 2020-04-08 16:07:52 0 days 00:19:14.000000000                                   1

我想在每列的底部生成所有“1”值的总和,所以它看起来像这样。

Opened              Closed              Resolved                   07:01 - 09:00    09:01 - 11:00   11:01 - 13:00   
2020-04-14 14:45:58 2020-04-14 15:04:22 0 days 00:18:24.000000000                                   1   
2020-04-14 13:43:28 2020-04-14 14:12:22 0 days 00:28:54.000000000                   1   
2020-04-14 13:41:18 2020-04-14 14:12:28 0 days 00:31:10.000000000                   1   
2020-04-14 10:57:53 2020-04-14 11:24:58 0 days 00:27:05.000000000       1           
2020-04-14 09:18:14 2020-04-14 09:44:04 0 days 00:25:50.000000000       1           
2020-04-14 09:16:28 2020-04-14 09:31:12 0 days 00:14:44.000000000       1           
2020-04-13 22:56:09 2020-04-14 00:39:30 0 days 01:43:21.000000000                   
2020-04-13 20:10:31 2020-04-13 20:26:25 0 days 00:15:54.000000000                   
2020-04-13 08:29:38 2020-04-13 18:29:25 0 days 09:59:47.000000000       1               
2020-04-09 14:04:14 2020-04-09 15:31:01 0 days 01:26:47.000000000                   1   
2020-04-09 10:06:24 2020-04-09 10:33:39 0 days 00:27:15.000000000       1           
2020-04-08 21:38:13 2020-04-09 07:01:30 0 days 09:23:17.000000000                   
2020-04-08 15:51:41 2020-04-08 16:08:02 0 days 00:16:21.000000000                                   1
2020-04-08 15:50:09 2020-04-08 16:07:57 0 days 00:17:48.000000000                                   1
2020-04-08 15:48:38 2020-04-08 16:07:52 0 days 00:19:14.000000000                                   1

Total                                                                   5           3               4                 
12


所以每一列都有自己的总和,然后所有列也有一个总数。

我试过了

data.groupby('Total')["07:01 - 09:00"].sum()[1]

但这会输出一长串“1”11111111111

我如何实际得到总数?

【问题讨论】:

    标签: python excel pandas numpy csv


    【解决方案1】:

    鉴于您提供的示例,您的三 (3) 列名为 ("07:01 - 09:00, 09:01 - 11:00, 11:01 - 13:00") 可能是 dtype: str,即你得到一长串1的原因。就是说,您应该按如下方式将列转换为浮动:

    data['07:01 - 09:00'] = data['07:01 - 09:00'].astype(float)
    data['09:01 - 11:00'] = data['09:01 - 11:00'].astype(float)
    data['11:01 - 13:00'] = data['11:01 - 13:00'].astype(float)
    

    之后,您可以尝试以下操作:

    data = data.append(data[['07:01 - 09:00', '09:01 - 11:00', '11:01 - 13:00']].sum(), 
                       ignore_index=True)
    

    【讨论】:

    • 我得到ValueError: could not convert string to float: '' 我认为这是因为我有需要跳过或删除的空值。我该怎么做?
    • 对所有三列都试试这个: data['07:01 - 09:00'] = data['07:01 - 09:00'].apply(lambda x: x.replace( '',float(nan))
    • 我收到此错误File "<ipython-input-155-04170ca764e5>", line 1 data['07:01 - 09:00'] = data['07:01 - 09:00'].apply(lambda x: x.replace('',float(nan)) ^ SyntaxError: unexpected EOF while parsing
    • 添加额外的) 后,我得到name 'nan' is not defined
    • 是的,对不起。应该如下 data['07:01 - 09:00'] = data['07:01 - 09:00'].apply(lambda x: x.replace('',float('nan')) )
    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2021-07-17
    相关资源
    最近更新 更多