设置熊猫数据框子集中的列表

时间:2020-05-21 12:00:54

标签: python pandas

这类似于this问题,但不同之处在于我担心数据帧的子集。

假设我具有以下数据框:

import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame(np.random.randn(5), columns=['A'])

,并且我希望有一个列“ B”,其值为A的负值["neg"]。但是,当我按照链接的问题中的建议进行以下操作时,我失去了列表的性质我的期望。

idx = df.A < 0  
df.loc[idx, "B"] = [["neg"]]*idx.sum() 
>>>
Out[17]: 
          A    B
0  0.496714  NaN
1 -0.138264  neg
2  0.647689  NaN
3  1.523030  NaN
4 -0.234153  neg

我在这里做错了什么?同时,我唯一可以解决此问题的方法是:df.loc[idx, 'B'] = df.loc[idx, 'B'].map(lambda x: [x])

2 个答案:

答案 0 :(得分:1)

您需要提供一个pd.Series,并且必须提供整个DataFrame的长度才能将["neg"]与任何一个负值相关联:

df.loc[idx, "B"] = pd.Series([["neg"]]*len(df))

结果:

          A      B
0  0.496714    nan
1 -0.138264  [neg]
2  0.647689    nan
3  1.523030    nan
4 -0.234153  [neg]

答案 1 :(得分:0)

您可以使用 np.where ,这非常快:

In [1417]: import numpy as np
In [1418]: df['B'] = np.where(df['A'] < 0, 'neg', np.nan)    
In [1419]: df                                            
Out[1419]: 
          A    B
0  0.496714  nan
1 -0.138264  neg
2  0.647689  nan
3  1.523030  nan
4 -0.234153  neg