【问题标题】:How to create a subtotal record in pandas using certain rows data如何使用某些行数据在熊猫中创建小计记录
【发布时间】:2021-09-03 06:43:31
【问题描述】:

我当前的代码是这样的:

df = pd.DataFrame({'animal': ['falcon', 'dog', 'spider', 'fish'],
                   'num_specimen_seen': [10, 2, 1, 8]})

df = df.append({'animal': 'Total Land', 'num_specimen_seen': df.loc[df['animal']=='falcon','num_specimen_seen']+df.loc[df['animal']=='dog','num_specimen_seen']+df.loc[df['animal']=='spider','num_specimen_seen']}, ignore_index=True)

df

在上面的代码中,我正在为名为 Total Land 的动物列创建一个新记录,并且它的 num_specimen_seen 是通过参考相应的陆地动物数量来计算的。有没有更好的方法来实现下面提供的我想要的结果?

我最好不想创建当前数据帧的子集来使用 .sum 功能,因为我需要多次执行上述操作

电流输出:

animal num_specimen_seen
0 falcon 10
1 dog 2
2 spider 1
3 fish 8
4 Total Land 0 NaN 1 NaN 2 NaN Name: num_specimen_see...

预期输出:

animal num_specimen_seen
0 falcon 10
1 dog 2
2 spider 1
3 fish 8
4 Total Land 13

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    Series.isinsum 一起使用:

    new = df.loc[df['animal'].isin(['falcon', 'dog','spider']), 'num_specimen_seen'].sum()
    df = df.append({'animal': 'Total Land', 'num_specimen_seen': new}, ignore_index=True)
    
    print (df)
           animal  num_specimen_seen
    0      falcon                 10
    1         dog                  2
    2      spider                  1
    3        fish                  8
    4  Total Land                 13
    

    对于单行解决方案使用(不幸的是难以阅读):

    df = df.append({'animal': 'Total Land', 
                    'num_specimen_seen': df.loc[df['animal'].isin(['falcon', 'dog','spider']), 'num_specimen_seen'].sum()}, ignore_index=True)
    

    【讨论】:

      【解决方案2】:

      使用sum,如下所示:

      df = df.append({'animal': 'Total Land', 
                      'num_specimen_seen': df['num_specimen_seen'][df['animal'].isin(['falcon', 'dog','spider'])].sum()}, ignore_index=True)
      

      输出:

      【讨论】:

      • 是的,也许是一些 SO 缓存?有时会发生。
      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 2016-07-30
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多