gpt4 book ai didi

python - pandas :pd. date_range 输出错误

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

我有一个包含 3 列 IDvrddatenddat 和 21000 行的数据集。

ID       vrddat      enddat
1       2015.01.01  2015.01.03    
2 2015.03.01 2015.03.03

PS:每个ID可以有多个vrddat和enddat。

我需要如下输出:

ID      vrddat      enddat       day
1    2015.01.01   2015.01.03  2015.01.01
1 2015.01.01 2015.01.03 2015.01.02
1 2015.01.01 2015.01.03 2015.01.03
2 2015.03.01 2015.03.03 2015.03.01
2 2015.03.01 2015.03.03 2015.03.02
2 2015.03.01 2015.03.03 2015.03.03

我使用以下代码来获得上述输出

for index,row in data.iterrows():
data_2 = pd.DataFrame(pd.date_range(row['vrddat'],row['enddat'], freq ='D'))

使用上面的代码我只得到 98 行,但理想情况下输出应该包含比输入更多的行。任何人都可以建议为什么我会得到这种输出。我的代码不是迭代每一行吗?如何在输出中获取 IDvrddatenddat 变量?

请提出建议。

最佳答案

您可以使用第一个 Actor to_datetime两列 vrddatenddat,然后使用 itertuplesconcat用于创建新的扩展DataFrame。最后merge ,但 df 中的 ID 必须是唯一的。

df.vrddat = pd.to_datetime(df.vrddat)
df.enddat = pd.to_datetime(df.enddat)

df1 = pd.concat([pd.Series(r.ID,pd.date_range(r.vrddat, r.enddat)) for r in df.itertuples()])
.reset_index()
df1.columns = ['day','ID']
print (df1)
day ID
0 2015-01-01 1
1 2015-01-02 1
2 2015-01-03 1
3 2015-03-01 2
4 2015-03-02 2
5 2015-03-03 2

print (pd.merge(df,df1, on='ID', how='left'))
ID vrddat enddat day
0 1 2015-01-01 2015-01-03 2015-01-01
1 1 2015-01-01 2015-01-03 2015-01-02
2 1 2015-01-01 2015-01-03 2015-01-03
3 2 2015-03-01 2015-03-03 2015-03-01
4 2 2015-03-01 2015-03-03 2015-03-02
5 2 2015-03-01 2015-03-03 2015-03-03

如果ID不唯一,可以使用唯一索引进行合并:

df.vrddat = pd.to_datetime(df.vrddat)
df.enddat = pd.to_datetime(df.enddat)
df = df.reset_index()

df1=pd.concat([pd.Series(r.index,pd.date_range(r.vrddat,r.enddat)) for r in df.itertuples()])
.reset_index()
df1.columns = ['day','index']
print (df1)
day index
0 2015-01-01 0
1 2015-01-02 0
2 2015-01-03 0
3 2015-03-01 1
4 2015-03-02 1
5 2015-03-03 1

print (pd.merge(df,df1, on='index', how='left').drop('index', axis=1))
ID vrddat enddat day
0 1 2015-01-01 2015-01-03 2015-01-01
1 1 2015-01-01 2015-01-03 2015-01-02
2 1 2015-01-01 2015-01-03 2015-01-03
3 2 2015-03-01 2015-03-03 2015-03-01
4 2 2015-03-01 2015-03-03 2015-03-02
5 2 2015-03-01 2015-03-03 2015-03-03

关于python - pandas :pd. date_range 输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41392062/

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