Python for loop over df将datetime转换为int
我有这个df:Python for loop over df将datetime转换为int,python,python-3.x,pandas,dataframe,for-loop,Python,Python 3.x,Pandas,Dataframe,For Loop,我有这个df: import pandas as pd import numpy as np from datetime import datetime, timedelta df = pd.DataFrame({"Time": ['2020-04-09 06:46:00', '2020-04-09 06:46:00', '2020-04-09 06:46:00', '2020-04-09 08:52:00', '2
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
df = pd.DataFrame({"Time": ['2020-04-09 06:46:00', '2020-04-09 06:46:00', '2020-04-09 06:46:00', '2020-04-09 08:52:00',
'2020-04-09 08:52:00', '2020-04-09 08:52:00', '2020-04-09 16:03:00', '2020-04-10 06:50:00',
'2020-04-10 06:50:00', '2020-04-10 12:33:00', '2020-04-10 12:33:00'],
"ID": [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]})
df['Time'] = pd.to_datetime(df['Time'])
df['ID'] = pd.to_numeric(df['ID'])
输出:
Time ID
0 2020-04-09 06:46:00 1
1 2020-04-09 06:46:00 1
2 2020-04-09 06:46:00 1
3 2020-04-09 08:52:00 1
4 2020-04-09 08:52:00 1
5 2020-04-09 08:52:00 1
6 2020-04-09 16:03:00 2
7 2020-04-10 06:50:00 2
8 2020-04-10 06:50:00 2
9 2020-04-10 12:33:00 2
10 2020-04-10 12:33:00 2
ID Time
0 1 2020-04-09 06:46:00
1 2 2020-04-09 16:03:00
现在我想创建一个新的df_事件
,它列出不同的ID
s以及相关的时间(min()
)。但当我执行以下for循环时:
df_event = pd.DataFrame(columns=['ID', 'Time'])
t = df['ID'].unique()
df_event['ID']=t
for item in t:
df_sub=df[df.ID == item]
df_event['Time']=np.where(df_event['ID']==item,df_sub.Time.min(), df_event['Time'])
df_event
第一个条目输出为int,而不是datetime:
ID Time
0 1 1586414760000000000
1 2 2020-04-09 16:03:00
如果有多个条目,问题只会出现在第一行。我将通过以下方式创建df_事件来简化代码:
df_event = df.groupby("ID").min().reset_index()
输出:
Time ID
0 2020-04-09 06:46:00 1
1 2020-04-09 06:46:00 1
2 2020-04-09 06:46:00 1
3 2020-04-09 08:52:00 1
4 2020-04-09 08:52:00 1
5 2020-04-09 08:52:00 1
6 2020-04-09 16:03:00 2
7 2020-04-10 06:50:00 2
8 2020-04-10 06:50:00 2
9 2020-04-10 12:33:00 2
10 2020-04-10 12:33:00 2
ID Time
0 1 2020-04-09 06:46:00
1 2 2020-04-09 16:03:00
如果您想继续使用np.where()
,那么问题似乎来自pandas和numpy类型之间的兼容性问题。可能会有帮助。首先感谢您的回答!通过尝试使用groupby
,我得到了这个错误f()接受1个位置参数,但给出了2个位置参数。这很奇怪。通过执行您的第一个代码块和我给出的行,我得到了上面所示的结果。也许其他变量也在干扰。您还可以尝试删除.reset_index()
,这是可选的.hmm。真奇怪。我在min()
中删除了'Time'
,现在它可以工作了。。是的,'Time'
是无用的。它必须在某些版本上引发错误。