在Python中向数据框添加列表列

3

我在pandas中有以下数据框:

    Type      Rand      Arrival
     0         0.3        4
     2         0.64       3
     1         0.98       12

现在,我想为每行添加一个列表的新列:
    Type      Rand      Arrival         Park
     0         0.3        4          [5,10,15,20]
     2         0.64       3          [4,9,14,19]
     1         0.98       12         [6,11,16,21]

我希望基于“Rand”列通过使用以下命令将其与某些值进行比较来实现这一点:
   df.loc[ (df.Rand <= 0.4) , 'Park' ] = [5,10,15,20]
   df.loc[ (df.Rand > 0.4) & (df.Rand <= 0.8) , 'Park' ] = [4,9,14,19]
   df.loc[ (df.Rand > 0.8) , 'Park' ] = [6,11,16,21]

但我遇到了以下错误:
  Must have equal len keys and value when setting with an iterable.

请问如何解决这个问题?

2个回答

2
>>> df.loc[df.Rand <= 0.4, 'Park'] = pd.Series([[5, 10, 15, 20]], index=df.index)
>>> df.loc[(df.Rand > 0.4) & (df.Rand <= 0.8), 'Park'] = pd.Series([[4,9,14,19]], index=df.index)
>>> df.loc[(df.Rand > 0.8), 'Park'] = pd.Series([[6,11,16,21]], index=df.index)
>>> df
   Type  Rand  Arrival             Park
0     0  0.30        4  [5, 10, 15, 20]
1     2  0.64        3   [4, 9, 14, 19]
2     1  0.98       12  [6, 11, 16, 21]

受[1]的启发


1
df.loc[ (df.Rand <= 0.4) , 'Park' ] = lambda:[5,10,15,20]
df.loc[ (df.Rand > 0.4) & (df.Rand <= 0.8) , 'Park' ] = lambda:[4,9,14,19]
df.loc[ (df.Rand > 0.8) , 'Park' ] = lambda:[6,11,16,21]

df.Park = df.Park.apply(lambda x: x())

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