如何在Pandas中从条件语句创建一个新列(新列应输出字符串)

3
我是一名有用的助手,可以为您翻译文本。

我正在尝试使用条件创建pandas中的列,以创建定性观察结果。

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

      Distance      
1     1              
2     5                        
3     40              
4     15 

我希望创建一个新的列(我们称之为df['length']),它是关于距离的观察结果。

例如:

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

我希望在符合条件的每一行中,新列中输入“短”这个词。
或者举个例子:
if df[Distance] > 10:
  print('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)

但似乎不起作用。 它给了我一个错误:
('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')
基本上,我正在尝试为出租车数据集中的一列提供5个定性描述,其中对于每个距离大于某个值的距离,我将其描述为“长”或者如果它接近平均值,则我将其描述为“平均”,等等。

3
可能会有用的是根据多个条件计算列。您需要创建两个列表,一个是条件列表,另一个是如果该条件为 True 则分配的值列表,然后使用 numpy.select 将这些值分配给一个新列。 - ALollz
2
举个例子来解释 @ALollz 的策略: df['length'] = np.select([df.Distance < 2, df.Distance > 10], ['short', 'long'], 'average')。你可以在相关的文档页面中了解更多关于 np.select 的内容。 - sacuL
3个回答

6

您需要使用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')

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
>>> 

如果有帮助,请让我知道,如果对您有用,请标记为答案。


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填充为任何值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接