Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表分配给熊猫中的遮罩行_Python_Pandas_List - Fatal编程技术网

Python 如何将列表分配给熊猫中的遮罩行

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(

我有一个包含一些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:

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