Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 根据行名称向dataframe添加列,如果行不存在,则将其添加到_Python_Pandas_Dataframe_Append_Concat - Fatal编程技术网

Python 根据行名称向dataframe添加列,如果行不存在,则将其添加到

Python 根据行名称向dataframe添加列,如果行不存在,则将其添加到,python,pandas,dataframe,append,concat,Python,Pandas,Dataframe,Append,Concat,我有以下数据帧,其中df1是我的主帧 df1 = pd.DataFrame([['a', '10'], ['b', '20']], columns=['letter', 'Jan']) df2 = pd.DataFrame([['a', '1'], ['b', '2'], ['c', '2']], columns=['letter', 'feb']) df3 = pd.DataFrame([['a', '10'], ['b', '20'

我有以下数据帧,其中df1是我的主帧

df1 = pd.DataFrame([['a', '10'], ['b', '20']],
               columns=['letter', 'Jan'])
df2 = pd.DataFrame([['a', '1'], ['b', '2'], ['c', '2']],
               columns=['letter', 'feb'])
df3 = pd.DataFrame([['a', '10'], ['b', '20'], ['c', '20'], ['d', '20']],
               columns=['letter', 'march'])
如何将df2和df3添加到df1中,使其看起来如下所示

 Letter jan feb march
0   a     10  1   10
1   b     20  2   20
2   c         2   20
3   d             20



res = pd.concat([df1, df2,df3])
我厌倦了这封信,信里不断地加上我不想写的东西

  letter  Jan  feb march
0      a   10  NaN   NaN
1      b   20  NaN   NaN
0      a  NaN    1   NaN
1      b  NaN    2   NaN
2      c  NaN    2   NaN
0      a  NaN  NaN    10
1      b  NaN  NaN    20
2      c  NaN  NaN    20
3      d  NaN  NaN    20
 
你知道我怎样才能解决这个问题吗? 感谢在
字母上使用外部合并数据帧
df1
df2
df3
,然后使用填充
NaN
值:

df = (
    df1.merge(df2, on='letter', how='outer')
    .merge(df3, on='letter', how='outer').fillna('')
)
或者,如果有大量需要合并的数据帧,我们可以使用+使用更简洁的解决方案,并将需要合并的数据帧列表传递给
reduce
函数:

from functools import reduce

df = reduce(lambda x, y:
            pd.merge(x, y, on='letter', how='outer'), [df1, df2, df3]).fillna('')
结果:

# print(df)

  letter Jan feb march
0      a  10   1    10
1      b  20   2    20
2      c       2    20
3      d            20

这是你问题的解决办法

df_outer = pd.merge(df1, df2, on='letter', how='outer')
df_outer = pd.merge(df_outer, df3, on='letter', how='outer')
df_outer = df_outer.fillna('')
df_outer