Pandas - df.loc在用于替换基于不同df的列时指定NaN

时间:2016-10-06 17:45:59

标签: python pandas

我正在尝试根据另一列将一些列映射为一个单独的键来分配某些列的值。问题是我认为映射没有被正确使用,因为它正在为列分配NaN。

我应该通过'SampleID'映射它们。

这是我想要赋值给

的DF
>>> df.ix[new_df['SampleID'].isin(pooled['SampleID']), cols]
        Volume_Received  Quantity  massug
88280               2.0      15.0     1.0
88282               3.0      55.0     5.0
88284               2.5      46.2     3.0
88286               2.0      98.0     5.0
229365              2.0       8.4     3.0
229366              3.0      15.9     3.0
229367              1.5       7.7     2.0
233666              1.5      50.8     3.0
233667              4.0      60.2     5.0

这是我给他们的新价值

>>> numerical
           Volume_Received  Quantity  massug
SampleID                                      
sample8             10.0      75.0     5.0
sample70            15.0     275.0    25.0
sample72            12.5     231.0    15.0
sample89             6.0     294.0    15.0
sample90             4.0      16.8     6.0
sample96             6.0      31.8     6.0
sample97             3.0      15.4     4.0
sample99             3.0     101.6     6.0
sample100            8.0     120.4    10.0

我正在使用此命令分配值:

df.ix[df['SampleID'].isin(pooled['SampleID']), cols] = numerical[cols]

汇总基本上是pooled = df[df['type'] == 'Pooled'],而cols是一个列表,上面显示了三列。运行上面的代码后,我在所有值中收到NaN。我想我正在告诉pandas因为映射而得到不存在的值,并且它返回了一些null,它被转换为NaN(假设)。

1 个答案:

答案 0 :(得分:1)

索引不匹配,

你可以使用

df.ix[df['SampleID'].isin(pooled['SampleID']), cols] = numerical[cols].values

只有尺寸完全相同!