如何根据条件在Pandas中构建新列(“新列”应输出字符串)

Tek*_*dra 3 python conditional dataframe python-3.x pandas

我正在尝试使用条件创建定性观察结果在熊猫中创建一列。

例如,如果数据框如下所示:

      Distance      
1     1              
2     5                        
3     40              
4     15 
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列(我们称之为df['length']),以观察距离。

例如:

if df[Distance] = 1:
  print('Short')
Run Code Online (Sandbox Code Playgroud)

我希望将“短”输入适合条件的每一行的新列中。

或者例如:

if df[Distance] > 10:
  print('Long')
Run Code Online (Sandbox Code Playgroud)

我希望新列中符合条件的每一行均为“长”。

我将如何去做呢?

我正在尝试将其写入函数。这就是我现在所拥有的:

def trip_distance(row):    

    df = pd.read_csv('taxi_january_standard_rate.csv')

    if df['trip_distance'] > 50 :
        return "Long"
Run Code Online (Sandbox Code Playgroud)

然后尝试使用它来填充新列:

df['trip_length'] = df.apply(trip_distance , axis=1)
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。这给了我一个错误:

(“系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。”,“发生在索引0”)

基本上,我正在尝试为出租车数据集中的一列提供5个定性描述,其中对于大于一定值的每个距离,我将其描述为“长”,或者如果它接近均值,则将其描述为“平均”等

pyd*_*pyd 7

你需要np.where

 import numpy as np
 df['Length']=np.where(df['Distance']>10,'Long','Short')
Run Code Online (Sandbox Code Playgroud)

如果需要多个条件,请使用@sacul解决方案,请使用np.select

df['length'] = np.select([df.Distance < 2, df.Distance > 10], ['short', 'long'], 'average')
Run Code Online (Sandbox Code Playgroud)