如何在熊猫中创建部分填充的列

时间:2019-08-07 10:00:50

标签: pandas

我有一个df_trg,其中有10行编号为0-9

我从各种来源获得了附加列foo的值,该列仅包含行的子集,例如S10-3, 7, 9,而S24, 6

我想用一个新列foo获得一个数据帧,其中某些行可能会保留NaN

  

除了以下方式之外,还有“更精细”的方式吗?

df_trg['foo'] = np.nan
for src in sources:
    df_trg['foo'][df_trg.index.isin(src.index)] = src
  

例如使用joinmerge

1 个答案:

答案 0 :(得分:0)

让我们使用以下命令创建源DataFrame( df ), s1 s2 Series 对象) 更新数据)以及它们的列表(来源):

df = pd.DataFrame(np.arange(1, 51).reshape((5, -1)).T)
s1 = pd.Series([11, 12, 13, 14, 15, 16], index=[0, 1, 2, 3, 7, 9])
s2 = pd.Series([27, 28], index=[4, 6])
sources = [s1, s2]

从添加 foo 列开始计算,该列最初填充 一个空字符串:

df = df.assign(foo='')

然后运行以下“更新”循环:

for src in sources:
    df.foo.update(other=src)

结果是:

    0   1   2   3   4 foo
0   1  11  21  31  41  11
1   2  12  22  32  42  12
2   3  13  23  33  43  13
3   4  14  24  34  44  14
4   5  15  25  35  45  27
5   6  16  26  36  46    
6   7  17  27  37  47  28
7   8  18  28  38  48  15
8   9  19  29  39  49    
9  10  20  30  40  50  16

我认为,此解决方案比您的解决方案好(至少一点),并且 较短。

替代方法:最初用 NaN 填充 foo 列,但这一次 更新值将转换为 float (使用 NaN 的副作用)。