PYTHON将数据帧插入现有数据帧
我是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
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
但是,我尝试使用concat和append,它们都没有给我想要的输出
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")