Python pandas 数据框和系列之间的列分配不起作用

Python pandas column asignment between dataframe and series does not work

我有一个 df 数据框:

df = pd.DataFrame({'b':[100,100,100], 'a':[1,2,3]})
df['c'] = pd.np.nan
df['d'] = pd.np.nan
df['c'] = df['c'].astype(object)
df['d'] = df['d'].astype(object)

df 是:

   a    b    c    d
0  1  100  NaN  NaN
1  2  100  NaN  NaN
2  3  100  NaN  NaN

我想用我的函数 func(x) 做一个 df.apply() 来设置列 cd.

的值

func(x) 是:

def func(x):
    return pd.Series({'d':{'foo':5, 'bar':10}, 'c':300})

df.apply() 是:

df[['d', 'c']] = df.apply(lambda x: func(x), axis=1)

结果是:

   a    b                      c    d
0  1  100  {'foo': 5, 'bar': 10}  300
1  2  100  {'foo': 5, 'bar': 10}  300
2  3  100  {'foo': 5, 'bar': 10}  300

我的问题是,为什么列 c 从索引为 d 的返回系列中获取结果?我怎样才能实现正确的列分配?当然我的函数andapply()要复杂得多,这就是我在return处使用字典的原因。所以 df[['c', 'd']] = df.apply(lambda x: func(x), axis=1) 不是我真正问题的解决方案。

期望的结果是:

   a    b    c                      d
0  1  100  300  {'foo': 5, 'bar': 10}
1  2  100  300  {'foo': 5, 'bar': 10}
2  3  100  300  {'foo': 5, 'bar': 10}

谢谢!

对我来说,创建新的 DataFrame df1 然后 concat 到原来的 df:

def func(x):
    return pd.Series({'d':{'foo':5, 'bar':10}, 'c':300})

df1 = df.apply(lambda x: func(x), axis=1)
print (df1)
     c                      d
0  300  {'bar': 10, 'foo': 5}
1  300  {'bar': 10, 'foo': 5}
2  300  {'bar': 10, 'foo': 5}

print (pd.concat([df[['a','b']], df1], axis=1))
   a    b    c                      d
0  1  100  300  {'bar': 10, 'foo': 5}
1  2  100  300  {'bar': 10, 'foo': 5}
2  3  100  300  {'bar': 10, 'foo': 5}