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

时间:2018-07-11 03:31:37

标签: python python-3.x pandas dataframe conditional

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

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

      Distance      
1     1              
2     5                        
3     40              
4     15 

我想创建一个新列(我们将其命名为df['length']),它是对距离的观察。

例如:

if df[Distance] = 1:
  print('Short')

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

例如:

if df[Distance] > 10:
  print('Long')

我希望新列中符合条件的每一行都是'Long'。

我该怎么做?

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

def trip_distance(row):    

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

    if df['trip_distance'] > 50 :
        return "Long"

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

df['trip_length'] = df.apply(trip_distance , axis=1)

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

  

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

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

3 个答案:

答案 0 :(得分:5)

您需要np.where

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

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

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

答案 1 :(得分:0)

>>> df = pd.DataFrame(l,columns=['Distannce'])
>>> df
   Distannce
0          1
1          5
2         40
3         15

>>> df['length'] = np.nan
>>> df['length'][df['Distannce'] > 10] = 'Long'
>>> df
   Distannce length
0          1    NaN
1          5    NaN
2         40   Long
3         15   Long
>>> df['length'][df['Distannce'] == 1] = 'Short'
>>> df
   Distannce length
0          1  Short
1          5    NaN
2         40   Long
3         15   Long
>>> 

让我知道是否有帮助,如果有帮助,也请标记为答案。

答案 2 :(得分:0)

或者,您可以执行以下操作:

df.loc[df['Distance'] > 10, 'length'] = 'Long'
df.loc[df['Distance'] == 1, 'length'] = 'Short'

输出:

   Distance length
0   1      Short
1   5      NaN
2   40     Long
3   15     Long

您可以使用fillna使用所需的任意值填充NaN