Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python for loop over df将datetime转换为int_Python_Python 3.x_Pandas_Dataframe_For Loop - Fatal编程技术网

Python for loop over df将datetime转换为int

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

我有这个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', 
                            '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'
是无用的。它必须在某些版本上引发错误。