gpt4 book ai didi

python - 获取 pandas 数据框中每行的最高日期值

转载 作者:行者123 更新时间:2023-12-01 00:52:17 24 4
gpt4 key购买 nike

我有一个 pandas 数据框,是通过导入 Excel 工作表获得的。这些列主要是日期,但也可以包含其他数据类型,例如 id 列。现在我想获取每行的最新日期和相关列名称,以便获取此类元组的列表或系列:id + 最近日期。我对此很陌生,非常感谢您的帮助。这是一些代码示例。

 import pandas as pd   
import os

def main():
#df=importExcel()
#getLastActions(df)
df1 = pd.DataFrame({'id':[1,2,3,4],
'y':[true,false,true,true],
'date1':[1996-05-31,2002-01-01,1999-07-17,2019-01-01],
'date2':[2010-10-11,2000-05-01,1999-12-17,1999-02-02],
'date3':[1993-09-11,2005-11-11,1997-08-08,2019-04-15] })
getLastActions(df1)

def importExcel():
wk_dir = os.path.dirname(os.path.realpath('__file__'))
df = pd.read_excel (wk_dir+'/OPS.xlsx')
return df

def getLastActions(df):
columns = list(df)
for i in columns:
#.......
if __name__ == '__main__':
main()

我想要得到某物。喜欢:结果= [(1,2010-10-11),(2,2005-11-11),(3,1999-12-17),(4,2019-04-15)]

也就是说,每行的最大值,但仅限于包含日期的列的最大值。有谁知道该怎么做吗?

最佳答案

id列创建索引,选择日期时间列DataFrame.filter ,获取每行的最大值,将日期时间转换为字符串,并将最后一个 Series 转换为元组列表 Series.items列表:

df1 = pd.DataFrame({'id':[1,2,3,4], 
'y':[True,False,True,True],
'date1':pd.to_datetime(['1996-05-31','2002-01-01','1999-07-17','2019-01-01']),
'date2':pd.to_datetime(['2010-10-11','2000-05-01','1999-12-17','1999-02-02']),
'date3':pd.to_datetime(['1993-09-11','2005-11-11','1997-08-08','2019-04-15'])})
print(df1)
id y date1 date2 date3
0 1 True 1996-05-31 2010-10-11 1993-09-11
1 2 False 2002-01-01 2000-05-01 2005-11-11
2 3 True 1999-07-17 1999-12-17 1997-08-08
3 4 True 2019-01-01 1999-02-02 2019-04-15

a = (list(df1.set_index('id')
.select_dtypes('datetime')
.max(axis=1)
.dt.strftime('%Y-%m-%d')
.items()))
print (a)
[(1, '2010-10-11'), (2, '2005-11-11'), (3, '1999-12-17'), (4, '2019-04-15')]

详细信息:

print (df1.set_index('id').select_dtypes('datetime'))
date1 date2 date3
id
1 1996-05-31 2010-10-11 1993-09-11
2 2002-01-01 2000-05-01 2005-11-11
3 1999-07-17 1999-12-17 1997-08-08
4 2019-01-01 1999-02-02 2019-04-15

print (df1.set_index('id').select_dtypes('datetime').max(axis=1))
id
1 2010-10-11
2 2005-11-11
3 1999-12-17
4 2019-04-15
dtype: datetime64[ns]

print (df1.set_index('id').select_dtypes('datetime').max(axis=1).dt.strftime('%Y-%m-%d'))
id
1 2010-10-11
2 2005-11-11
3 1999-12-17
4 2019-04-15
dtype: object

关于python - 获取 pandas 数据框中每行的最高日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477272/

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