gpt4 book ai didi

python - 在 Pandas 的日期列中查找更改

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

我有一个 pandas 数据框,是根据某些条件进行融化和过滤后得到的,它看起来像这样

 P       D
A 2018-01-01
A 2018-01-02
A 2018-01-03
B 2018-01-03
A 2018-01-04
B 2018-01-04
A 2018-01-05
A 2018-01-06
A 2018-01-07
B 2018-01-07

从这个数据框,我想制作一些像这样的数据框,

P        D1          D2
A 2018-01-01 2018-01-02
A, B 2018-01-03 2018-01-04
A 2018-01-05 2018-01-06
A, B 2018-01-07 -

从数据中的P列可以看出,从2018-01-01只有一个值A >2018-01-02,因此我们将结果数据框中的第一行作为 A, 2018-01-01, 2018-01-02

同样,从 2018-01-032018-01-04 有 A 和 B,因此数据帧中的第二行。

如何在 pandas 中有效地执行此操作?

最佳答案

你可以试试下面的方法:

import pandas as pd
import datetime as dt

#generate dataframe
letters = ['A', 'A', 'A', 'B', 'A', 'B', 'A', 'A', 'A', 'B']
dates = [dt.date(2018,1,1), dt.date(2018,1,2), dt.date(2018,1,3), dt.date(2018,1,3), dt.date(2018,1,4), dt.date(2018,1,4), dt.date(2018,1,5), dt.date(2018,1,6), dt.date(2018,1,7), dt.date(2018,1,7)]
df = pd.DataFrame(zip(letters, dates), columns = ['P','D'])

enter image description here

#generate date pairs
start_date = df.iloc[0]['D']
end_date = df.iloc[-1]['D']
dates = [start_date + dt.timedelta(days=x) for x in range(0, (end_date-start_date).days, 2)]
date_pairs = zip(dates, [date + dt.timedelta(days=1) for date in dates])

#generate output dataframe
l = []
for date1,date2 in date_pairs:
p = df[(df['D'] >= date1) & (df['D'] <= date2)]['P'].unique()
l.append({'P' : p, 'D1' : date1, 'D2' : date2})

out = pd.DataFrame(l)[['P','D1','D2']]
out

输出:

enter image description here

当然,如果您有奇数个日期(如您的示例),则不会捕获最后一个日期,但如果需要,可以将其附加在末尾。

关于python - 在 Pandas 的日期列中查找更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56864481/

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