gpt4 book ai didi

python - 根据另一个 pandas 日期列表拆分 pandas 日期列表

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:12 25 4
gpt4 key购买 nike

我正在尝试使用另一个日期列表来拆分一个日期列表。所以:

d = {'date':['1/15/2015','2/15/2015'], 'num':[1,2]}
s = {'split':['2/1/2015']}

df = pd.DataFrame(d)
sf = pd.DataFrame(s)

df['date'] = pd.to_datetime(df['date'])
sf['split'] = pd.to_datetime(sf['split'])

df['date'].split_by(sf['split'])

会产生:

        date    num
0 2015-01-15 1.0
1 2015-02-01 NaN
2 2015-02-15 2.0

...但当然,事实并非如此。我确信这里缺少一个简单的合并或连接,但我无法弄清楚。谢谢。

此外,如果 'split' 列表有多个日期,其中一些日期超出 'date' 列表的范围,我不希望将它们包括在内。所以基本上,新范围的范围将与旧范围相同。

(旁注:如果有更好的方法将字典转换为 DataFrame 并立即将日期字符串转换为日期时间,那将是锦上添花)

最佳答案

我认为你需要boolean indexing首先按 dfdate 列的 minmax 过滤 sf concatsort_values ,为了对齐需要重命名列:

d = {'date':['1/15/2015','2/15/2015'], 'num':[1,2]}
s = {'split':['2/1/2015', '2/1/2016', '2/1/2014']}

df = pd.DataFrame(d)
sf = pd.DataFrame(s)

df['date'] = pd.to_datetime(df['date'])
sf['split'] = pd.to_datetime(sf['split'])
print (df)
date num
0 2015-01-15 1
1 2015-02-15 2

print (sf)
split
0 2015-02-01
1 2016-02-01
2 2014-02-01
mask = (sf.split <= df.date.max()) & (sf.split >= df.date.min())
print (mask)
0 True
1 False
2 False
Name: split, dtype: bool

sf = sf[mask]
print (sf)
split
0 2015-02-01

df = pd.concat([df, sf.rename(columns={'split':'date'})]).sort_values('date')
print (df)
date num
0 2015-01-15 1.0
0 2015-02-01 NaN
1 2015-02-15 2.0

关于python - 根据另一个 pandas 日期列表拆分 pandas 日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41276829/

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