gpt4 book ai didi

python - 使用条件合并日期范围内某个日期的两个数据框

转载 作者:行者123 更新时间:2023-12-03 21:41:54 24 4
gpt4 key购买 nike

我有如下日历数据框。

calendar = pd.DataFrame({"events": ["e1", "e2", "e3"],
"date_start": ["2021-02-01", "2021-02-06", "2021-02-03"],
"date_end":["2021-02-04", "2021-02-07", "2021-02-03"],
"country": ["us", "us", "uk"]})
calendar["date_start"] = pd.to_datetime(calendar["date_start"])
calendar["date_end"] = pd.to_datetime(calendar["date_end"])
我有一个每日数据框,如下所示。
daily = pd.DataFrame({"date": pd.date_range(start="2021-02-01", end="2021-02-08"),
"value":[10, 20, 30, 40, 50, 60, 70, 80]})
我只想从美国获取事件并加入每日数据框,但加入条件是(日期>= date_start)和(日期<= date_end)。所以预期的输出看起来像这样
date              value   events
2021-02-01 10 e1
2021-02-02 20 e1
2021-02-03 30 e1
2021-02-04 40 e1
2021-02-05 50
2021-02-06 60 e2
2021-02-07 70 e2
2021-02-08 80
我可以做循环,但它无效。我可以有你的建议如何以更好的方式做。

最佳答案

使用 df.merge :

# Do a cross-join on the `tmp` column
In [2279]: x = calendar.assign(tmp=1).merge(daily.assign(tmp=1))

# Filter rows by providing your conditions
In [2284]: x = x[x.date.between(x.date_start, x.date_end) & x.country.eq('us')]

# Left-join with `daily` df to get all rows
In [2289]: ans = daily.merge(x[['date', 'events']], on='date', how='left')

In [2290]: ans
Out[2290]:
date value events
0 2021-02-01 10 e1
1 2021-02-02 20 e1
2 2021-02-03 30 e1
3 2021-02-04 40 e1
4 2021-02-05 50 NaN
5 2021-02-06 60 e2
6 2021-02-07 70 e2
7 2021-02-08 80 NaN

关于python - 使用条件合并日期范围内某个日期的两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67031770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com