输入
df1
id date v1
a 2020-1-1 1
a 2020-1-2 2
b 2020-1-4 10
b 2020-1-22 30
c 2020-2-4 10
c 2020-2-22 30
df2
id date v1
a 2020-1-3 1
b 2020-1-7 12
b 2020-1-22 13
c 2020-2-10 15
c 2020-2-22 60目标
id date v1 v2
a 2020-1-1 1 0
a 2020-1-2 2 0
a 2020-1-3 0 1
b 2020-1-4 10 0
b 2020-1-7 0 12
b 2020-1-22 30 13
c 2020-2-4 10 0
c 2020-2-10 0 15
c 2020-2-22 30 60详情如下:
只有两个数据格式,对于每个unique.
id的数据格式,每个id包含来自两个dataframe
df1和df2中的日期返回原始值,而日期仅在df1和df2中返回,如果日期上没有值,则返回原始值。H 220F 221Try
我已经搜索了合并文件,但是我找不到答案。
发布于 2020-07-01 08:32:31
首先通过to_datetime将列转换为datetimes以获得正确的排序,然后将DataFrame.merge与外部联接并为df2重命名列v1,以避免输出中的v1_x和v1_y列,用DataFrame.fillna替换缺失的值,并按DataFrame.sort_values对输出进行排序。
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])
df = (df1.merge(df2.rename(columns={'v1':'v2'}), on=['id','date'], how='outer')
.fillna(0)
.sort_values(['id','date']))
print (df)
id date v1 v2
0 a 2020-01-01 1.0 0.0
1 a 2020-01-02 2.0 0.0
6 a 2020-01-03 0.0 1.0
2 b 2020-01-04 10.0 0.0
7 b 2020-01-07 0.0 12.0
3 b 2020-01-22 30.0 13.0
4 c 2020-02-04 10.0 0.0
8 c 2020-02-10 0.0 15.0
5 c 2020-02-22 30.0 60.0https://stackoverflow.com/questions/62672721
复制相似问题