Python 使用基于另一列中相应行的条件值填充dataframe列的最佳方法是什么?

Python 使用基于另一列中相应行的条件值填充dataframe列的最佳方法是什么?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个数据框df,根据条件,我试图在其中填充空“Set”列中的值。条件如下:“Set”列的值需要为“IN”,只要“valence\u median\u split”列的值在相应行中为“Low\u valence”,在所有其他情况下为“OUT” 请参见下面我尝试解决此问题的示例: df.head() Out[65]: ID Category Num Vert_Horizon Description Fem_Valence_Mean \ 0 Animals_

我有一个数据框df,根据条件,我试图在其中填充空“Set”列中的值。条件如下:“Set”列的值需要为“IN”,只要“valence\u median\u split”列的值在相应行中为“Low\u valence”,在所有其他情况下为“OUT”

请参见下面我尝试解决此问题的示例:

df.head()

Out[65]: 
              ID Category  Num Vert_Horizon Description  Fem_Valence_Mean  \
0  Animals_001_h  Animals    1            h  Dead Stork              2.40   
1  Animals_002_v  Animals    2            v        Lion              6.31   
2  Animals_003_h  Animals    3            h       Snake              5.14   
3  Animals_004_v  Animals    4            v        Wolf              4.55   
4  Animals_005_h  Animals    5            h         Bat              5.29   

   Fem_Valence_SD  Fem_Av/Ap_Mean  Fem_Av/Ap_SD  Arousal_Mean ...   Contrast  \
0            1.30            3.03          1.47          6.72 ...      68.45   
1            2.19            5.96          2.24          6.69 ...      32.34   
2            1.19            5.14          1.75          5.34 ...      59.92   
3            1.87            4.82          2.27          6.84 ...      75.10   
4            1.56            4.61          1.81          5.50 ...      59.77   

   JPEG_size80   LABL   LABA   LABB  Entropy  Classification  \
0       263028  51.75  -0.39  16.93     7.86                   
1       250208  52.39  10.63  30.30     6.71                   
2       190887  55.45   0.25   4.41     7.83                   
3       282350  49.84   3.82   1.36     7.69                   
4       329325  54.26  -0.34  -0.95     7.82                   

   valence_median_split  temp_selection  set  
0           Low_Valence   Animals_001_h       
1          High_Valence             NaN       
2           Low_Valence   Animals_003_h       
3           Low_Valence   Animals_004_v       
4           Low_Valence   Animals_005_h       

[5 rows x 36 columns]

df['set'] = np.where(df.loc[df['valence_median_split'] == 'Low_Valence'], 'IN', 'OUT') 

ValueError: Length of values does not match length of index
我可以通过使用loc将df分为两个不同的df来实现这一点,但我想知道是否有更优雅的解决方案使用“np.where”或类似的方法。

更改为

df['set'] = np.where(df['valence_median_split'] == 'Low_Valence', 'IN', 'OUT') 
如果需要
.loc

df.loc[df['valence_median_split'] == 'Low_Valence','set']='IN'
df.loc[df['valence_median_split'] != 'Low_Valence','set']='OUT'

你知道df.where或df.loc是否可以使用.sample方法吗?因此,如果我尝试从满足特定条件的列中随机抽取200行。这一行似乎会产生一个错误:df['temp\u selection']=np.where(df['valence\u median\u split']='Low\u valence',df['valence\u median\u split'].sample(n=200),'OUT')@arkadiy np.where可以实现这一点,添加reindex
np.where(df['valence\u median\u split']='Low\u valence',df['valence\u median\u split'])。样本(n=200)。reindex(df.index),'OUT')