如何在pandas中跨多个列计算值?

2024-09-29 23:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于摩托车的熊猫数据帧。 数据集有1000行和30列。在

例如

date motor1 motor2 motor3 vehicle1  vehicle2 reason 
2010 Honda   NaN    NaN    Sedan     NaN        *    
  :
2012 Yamaha  Kymco  NaN    Truck     Sedan      *  
  :
2013 Harley  Kymco  Kymco  Ambulance NaN        *     
  :

我想创建一个新列,以便在没有空值的列中记录值。在

我期望的输出是:

^{pr2}$

另外,由于数据是按年份排列的,我还想为特定年份设置一个条件,只需查看特定年份涉及的车辆和摩托车数量。在

最初,我想使用groupby函数+count函数+conditional函数,但是我不能得到我想要的。在

有什么优雅的方法来解决这个问题吗?在


Tags: 数据函数datenanreason年份yamahasedan
2条回答

我们可以用^{}^{}来计算NaN的数量。但是首先我们用^{}进行过滤,得到以数字结尾的列:

df['count'] = df.filter(regex='\d$').notna().sum(axis=1)

^{pr2}$

解释正则表达式:

  • \d是一个数字
  • $是字符串的结尾。在

您可以使用notna和跨列求和来获得非空计数:

import numpy as np
import pandas as pd

df = pd.DataFrame([[2010, 'Honda', np.nan, np.nan, 'Sedan', np.nan, '*'],
                   [2012, 'Yamaha', 'Kymco', np.nan, 'Truck', 'Sedan', '*'],
                   [2014, 'Harley', 'Kymco', 'Kymco', 'Ambulance', np.nan, '*']], columns=['year', 'motor1', 'motor2', 'motor3', 'vehicle1', 'vehicle2', 'reason'])

result = df.assign(count=df.loc[:, 'motor1':'vehicle2'].notna().sum(axis=1))

print(result)

输出:

^{pr2}$

要查看特定年份,只需使用布尔索引:

print(result[result['year'] == 2010])

输出:

   year motor1 motor2 motor3 vehicle1 vehicle2 reason  count
0  2010  Honda    NaN    NaN    Sedan      NaN      *      2

相关问题 更多 >

    热门问题