PYTHON将数据帧插入现有数据帧

PYTHON将数据帧插入现有数据帧,python,Python,我是Python的初学者。我想在一个日期列上合并一些数据集。 我有这样一个数据集: import pandas as pd import numpy as np from datetime import date from datetime import timedelta d1=date.today() print(d1) d2=d1 - timedelta(days = - 1) print(d2) d3=d2 - timedelta(days = - 1) df1 = pd.DataFra

我是Python的初学者。我想在一个日期列上合并一些数据集。 我有这样一个数据集:

import pandas as pd
import numpy as np
from datetime import date
from datetime import timedelta
d1=date.today()
print(d1)
d2=d1 - timedelta(days = - 1)
print(d2)
d3=d2 - timedelta(days = - 1)
df1 = pd.DataFrame({'Date': [d1,d2], 
                    'number': [100, 200],
                    'a':[11, 12],
                    'b':[21, 22],
                    'c':[31, 32],
                    'd':[41, 42],
                    'e':[51, 52],
                    'f':[61, 62], 
                    'g':[np.nan ,np.nan ]
                   })
df21= pd.DataFrame({'Date': [d3], 
                    'number': [100],
                    'a':[13 ]})
df22 = pd.DataFrame({'Date': [d3], 
                    'number': [100],
                    'b':[23 ]})
df3 = pd.DataFrame({'Date': [d1], 
                    'number': [100],
                    'g':[10]})
输出数据集:

#df1
        Date number a   b   c   d   e   f   g
0   2021-05-31  100 11  21  31  41  51  61  NaN
1   2021-06-01  200 12  22  32  42  52  62  NaN

#df21
    Date    number  a
0   2021-06-02  100 13

#df22
    Date    number  b
0   2021-06-02  100 23

#df3

    Date    number  g
0   2021-05-31  100 10
结果我想:

    Date     number a          b    c          d    e          f    g
0   2021-05-31  100 11.0    21.0    31.0    41.0    51.0    61.0    10
1   2021-06-01  200 12.0    22.0    32.0    42.0    52.0    62.0    NaN
2   2021-06-02  100 13.0    23.0    NaN     NaN     NaN      NaN    NaN 
但是,我尝试使用concatappend,它们都没有给我想要的输出

pd.concat([df1,df21, df22,df3], ignore_index=True)
     Date   number  a          b    c          d    e          f    g
0   2021-05-31  100 11.0    21.0    31.0    41.0    51.0    61.0    NaN
1   2021-06-01  200 12.0    22.0    32.0    42.0    52.0    62.0    NaN
2   2021-06-02  100 13.0    NaN      NaN    NaN      NaN    NaN     NaN
3   2021-06-02  100 NaN    23.0      NaN    NaN      NaN    NaN     NaN
4   2021-05-31  100 NaN     NaN      NaN    NaN      NaN    NaN     10.0

df1.append(df21, ignore_index=True).append(df22, ignore_index=True)
 
       Date number  a          b    c          d    e          f    g
0   2021-05-31  100 11.0    21.0    31.0    41.0    51.0    61.0    NaN
1   2021-06-01  200 12.0    22.0    32.0    42.0    52.0    62.0    NaN
2   2021-06-02  100 13.0    NaN      NaN    NaN      NaN    NaN     NaN
3   2021-06-02  100 NaN     23.0     NaN    NaN      NaN    NaN     NaN
我不得不使用Python来组合这些表。有人知道怎么做吗? 谢谢你的帮助

谢谢

JH

您可以尝试以下方法:

dfs = [df1,df21,df22,df3]
df = pd.concat(dfs)
df.groupby('Date', as_index=False).first()

我想你想要这个功能。您可以执行以下操作:

df1 = df1.merge(df21, on="Date", how="outer").merge(df22, on="Date", how="outer").merge(df3, on="Date", how="outer")
例如,由于
df1
df21
都包含
a
,根据正常的连接行为,Pandas将复制列,并且您将得到类似
a_x
a_y
的内容,表示两个数据帧中的任何一个。然后,您可以编写一个变种来组合这一点,如
a=a\u x或a\u y
(您还可以定义当两列的值不同时如何处理这种情况)


如果你的问题已经被任何答案解决了,请考虑通过点击复选标记来接受它。祝你今天愉快
df1 = df1.merge(df21, on="Date", how="outer").merge(df22, on="Date", how="outer").merge(df3, on="Date", how="outer")