我有2个这样的数据框
$.get("https://ipinfo.io/8.8.8.8/country", function(response) {
console.log(country[response]);
})
所以,我的数据框看起来像这样
df = pd.DataFrame({"date":["2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04"],
"A": [1., 2., 3., 4.],
"B": ["a", "b", "c", "d"]})
df["date"] = pd.to_datetime(df["date"])
df_new = pd.DataFrame({"date":["2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05", "2019-01-06"],
"A": [2, 3.5, 4, 5., 6.],
"B": ["b", "c1", "d", "e", "f"]})
df_new["date"] = pd.to_datetime(df_new["date"])
从这些数据框中,我想以特定条件将df附加到df_new:
在两个数据框中都有日期的任何行,我们将这些行放在df_new
任何在df中提供日期但在df_new中不可用的行,我们在df中使用此类行
最后我的预期输出看起来像这样
df
-----------------------
date A B
2019-01-01 1 a
2019-01-02 2 b
2019-01-03 3 c
2019-01-04 4 d
df_new
----------------------
date A B
2019-01-02 2 b
2019-01-03 3.5 c1
2019-01-04 4 d
2019-01-05 5 e
2019-01-06 6 f
我可以考虑找到2个数据框之间的行差,但是当我考虑到date列时,这行不通。请问您有什么建议吗?谢谢。
答案 0 :(得分:3)
使用concat
并在DataFrame.drop_duplicates
的date
列中删除重复项,最后在DataFrame.reset_index
的情况下创建默认的uniqe索引值:
df = pd.concat([df, df_new]).drop_duplicates('date', keep='last').reset_index(drop=True)
print (df)
date A B
0 2019-01-01 1.0 a
1 2019-01-02 2.0 b
2 2019-01-03 3.5 c1
3 2019-01-04 4.0 d
4 2019-01-05 5.0 e
5 2019-01-06 6.0 f
答案 1 :(得分:0)
您可以将pandas.DataFrame.merge
与outer
一起使用,然后使用drop_duplicates
删除重复的行。
df1 = df_new.merge(df, how='outer', on=['date','A','B']).sort_values(by='date').drop_duplicates('date').reset_index(drop=True)
print(df1)
输出:
A B date
0 1.0 a 2019-01-01
1 2.0 b 2019-01-02
2 3.5 c1 2019-01-03
3 4.0 d 2019-01-04
4 5.0 e 2019-01-05
5 6.0 f 2019-01-06