Python 如何将列表分配给熊猫中的遮罩行
我有一个包含一些nan值的数据帧。我想给dataframe中的新列D分配一个列表([5,7,8,9]),但只分配给B列中具有非nan值的行 因此,我创建了一个掩码(not_na_mask=df_test['B'].notna())来指示列B中不是nan的行。然后我将np.nan分配给新的列D。现在我需要将列表分配给屏蔽行。我尝试了df_test[not_na_mask]['D']=labels,但它不起作用,并且在D列中的所有值中保留np.nan 列表中的项目数与not_na_mask.sum()相同 您可以在此处找到示例df:Python 如何将列表分配给熊猫中的遮罩行,python,pandas,list,Python,Pandas,List,我有一个包含一些nan值的数据帧。我想给dataframe中的新列D分配一个列表([5,7,8,9]),但只分配给B列中具有非nan值的行 因此,我创建了一个掩码(not_na_mask=df_test['B'].notna())来指示列B中不是nan的行。然后我将np.nan分配给新的列D。现在我需要将列表分配给屏蔽行。我尝试了df_test[not_na_mask]['D']=labels,但它不起作用,并且在D列中的所有值中保留np.nan 列表中的项目数与not_na_mask.sum(
df_test = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar'],
'B' : [1, 2, np.nan, 4, 6, np.nan],
'C' : [2.0, np.nan, 8., 1., 2., 9.]})
df_test:
A B C
0 foo 1.0 2.0
1 bar 2.0 NaN
2 foo NaN 8.0
3 bar 4.0 1.0
4 foo 6.0 2.0
5 bar NaN 9.0
not_na_mask = df_test['B'].notna()
df_test['D'] = np.nan
labels = [5, 7, 8, 9]
df_test[not_na_mask]['D'] = labels
我想要的输出应该如下所示:
A B C D
0 foo 1.0 2.0 5.0
1 bar 2.0 NaN 7.0
2 foo NaN 8.0 NaN
3 bar 4.0 1.0 8.0
4 foo 6.0 2.0 9.0
5 bar NaN 9.0 NaN
如果未错列值的数量与列表的长度相同
标签
则可以使用:
如果未错列值的数量与列表的长度相同
标签
则可以使用:
循环生成的掩码数组,并根据结果动态生成新列。将新列作为值分配给列D。循环生成的掩码数组并根据结果动态生成新列。将新列作为值指定给列D。
not_na_mask = df_test['B'].notna()
labels = [5, 7, 8, 9]
df_test.loc[not_na_mask, 'D'] = labels
print (df_test)
A B C D
0 foo 1.0 2.0 5.0
1 bar 2.0 NaN 7.0
2 foo NaN 8.0 NaN
3 bar 4.0 1.0 8.0
4 foo 6.0 2.0 9.0
5 bar NaN 9.0 NaN