gpt4 book ai didi

python - 循环多个日期并比较持续时间 - Pandas

转载 作者:行者123 更新时间:2023-11-28 22:29:53 26 4
gpt4 key购买 nike

我试图遍历一堆不同的日期并将它们的持续时间写到预定义的列中。到目前为止,我的代码如下所示(日期比显示的多):

First = ['ADate','BDate','CDate']
Second = ['BDate','CDate','DDate']
Result = ['AtoB','BtoC','CtoD']
for x in First:
for y in Second:
for z in Result:
Data[z] = (Data.y - Data.x).astype('timedelta64[m]')

这给了我错误“DataFrame 对象没有属性‘y’。”我做错了什么,我怎样才能让它工作?谢谢!

最佳答案

看来你需要添加[],但是数据被覆盖了:

First = ['ADate','BDate','CDate']
Second = ['BDate','CDate','DDate']
Result = ['AtoB','BtoC','CtoD']
for x in First:
for y in Second:
for z in Result:
Data[z] = (Data[y] - Data[x]).astype('timedelta64[m]')

但是如果需要所有列的组合:

for x in First:
for y in Second:
for z in Result:
#new column from x,y,z values
Data[z + x + y] = (Data[y] - Data[x]).astype('timedelta64[m]')

如果需要从 First 中减去 Second 中的列,我认为需要重命名列以对齐数据:

d = dict(zip(First, Second))
Data[Result] = (Data[Second] - Data[First].rename(columns=d)).astype('timedelta64[m]')

示例:

rng = pd.date_range('2015-01-01', periods=5, freq='Min')
np.random.seed(201)
rng1 = np.random.choice(rng, size=5)
np.random.seed(110)
rng2 = np.random.choice(rng, size=5)
np.random.seed(112)
rng3 = np.random.choice(rng, size=5)
np.random.seed(114)
rng4 = np.random.choice(rng, size=5)

Data = pd.DataFrame({'ADate': rng1,
'BDate':rng2,
'CDate':rng3,
'DDate':rng4})

print (Data)
ADate BDate CDate \
0 2015-01-01 00:00:00 2015-01-01 00:00:00 2015-01-01 00:04:00
1 2015-01-01 00:01:00 2015-01-01 00:03:00 2015-01-01 00:03:00
2 2015-01-01 00:00:00 2015-01-01 00:01:00 2015-01-01 00:00:00
3 2015-01-01 00:01:00 2015-01-01 00:00:00 2015-01-01 00:02:00
4 2015-01-01 00:04:00 2015-01-01 00:00:00 2015-01-01 00:01:00

DDate
0 2015-01-01 00:02:00
1 2015-01-01 00:03:00
2 2015-01-01 00:02:00
3 2015-01-01 00:03:00
4 2015-01-01 00:04:00
First = ['ADate','BDate','CDate']
Second = ['BDate','CDate','DDate']
Result = ['AtoB','BtoC','CtoD']

d = dict(zip(First, Second,))
Data[Result] = (Data[Second] - Data[First].rename(columns=d)).astype('timedelta64[m]')
print (Data)

ADate BDate CDate \
0 2015-01-01 00:00:00 2015-01-01 00:00:00 2015-01-01 00:04:00
1 2015-01-01 00:01:00 2015-01-01 00:03:00 2015-01-01 00:03:00
2 2015-01-01 00:00:00 2015-01-01 00:01:00 2015-01-01 00:00:00
3 2015-01-01 00:01:00 2015-01-01 00:00:00 2015-01-01 00:02:00
4 2015-01-01 00:04:00 2015-01-01 00:00:00 2015-01-01 00:01:00

DDate AtoB BtoC CtoD
0 2015-01-01 00:02:00 0.0 4.0 -2.0
1 2015-01-01 00:03:00 2.0 0.0 0.0
2 2015-01-01 00:02:00 1.0 -1.0 2.0
3 2015-01-01 00:03:00 -1.0 2.0 1.0
4 2015-01-01 00:04:00 -4.0 1.0 3.0

for x in First:
for y in Second:
for z in Result:
Data[z] = (Data[y] - Data[x]).astype('timedelta64[m]')

print (Data)

ADate BDate CDate \
0 2015-01-01 00:00:00 2015-01-01 00:00:00 2015-01-01 00:04:00
1 2015-01-01 00:01:00 2015-01-01 00:03:00 2015-01-01 00:03:00
2 2015-01-01 00:00:00 2015-01-01 00:01:00 2015-01-01 00:00:00
3 2015-01-01 00:01:00 2015-01-01 00:00:00 2015-01-01 00:02:00
4 2015-01-01 00:04:00 2015-01-01 00:00:00 2015-01-01 00:01:00

DDate AtoB BtoC CtoD
0 2015-01-01 00:02:00 -2.0 -2.0 -2.0
1 2015-01-01 00:03:00 0.0 0.0 0.0
2 2015-01-01 00:02:00 2.0 2.0 2.0
3 2015-01-01 00:03:00 1.0 1.0 1.0
4 2015-01-01 00:04:00 3.0 3.0 3.0
for x in First:
for y in Second:
for z in Result:
Data[x + '_' + y + '_' + z] = (Data[y] - Data[x]).astype('timedelta64[m]')

print (Data)

ADate BDate CDate \
0 2015-01-01 00:00:00 2015-01-01 00:00:00 2015-01-01 00:04:00
1 2015-01-01 00:01:00 2015-01-01 00:03:00 2015-01-01 00:03:00
2 2015-01-01 00:00:00 2015-01-01 00:01:00 2015-01-01 00:00:00
3 2015-01-01 00:01:00 2015-01-01 00:00:00 2015-01-01 00:02:00
4 2015-01-01 00:04:00 2015-01-01 00:00:00 2015-01-01 00:01:00

DDate ADate_BDate_AtoB ADate_BDate_BtoC ADate_BDate_CtoD \
0 2015-01-01 00:02:00 0.0 0.0 0.0
1 2015-01-01 00:03:00 2.0 2.0 2.0
2 2015-01-01 00:02:00 1.0 1.0 1.0
3 2015-01-01 00:03:00 -1.0 -1.0 -1.0
4 2015-01-01 00:04:00 -4.0 -4.0 -4.0

ADate_CDate_AtoB ADate_CDate_BtoC ADate_CDate_CtoD ... \
0 4.0 4.0 4.0 ...
1 2.0 2.0 2.0 ...
2 0.0 0.0 0.0 ...
3 1.0 1.0 1.0 ...
4 -3.0 -3.0 -3.0 ...

BDate_DDate_CtoD CDate_BDate_AtoB CDate_BDate_BtoC CDate_BDate_CtoD \
0 2.0 -4.0 -4.0 -4.0
1 0.0 0.0 0.0 0.0
2 1.0 1.0 1.0 1.0
3 3.0 -2.0 -2.0 -2.0
4 4.0 -1.0 -1.0 -1.0

CDate_CDate_AtoB CDate_CDate_BtoC CDate_CDate_CtoD CDate_DDate_AtoB \
0 0.0 0.0 0.0 -2.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 2.0
3 0.0 0.0 0.0 1.0
4 0.0 0.0 0.0 3.0

CDate_DDate_BtoC CDate_DDate_CtoD
0 -2.0 -2.0
1 0.0 0.0
2 2.0 2.0
3 1.0 1.0
4 3.0 3.0

[5 rows x 31 columns]

关于python - 循环多个日期并比较持续时间 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766983/

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