首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取熊猫数据帧中每一行的最高日期值。

获取熊猫数据帧中每一行的最高日期值。
EN

Stack Overflow用户
提问于 2019-06-06 12:06:38
回答 1查看 1.5K关注 0票数 1

我有一个熊猫的数据,我得到了通过导入一个excel表。列主要是日期,但包含也可能是另一种数据类型,例如id列。现在,我想获取每一行的最新日期和相关的列名,以便获得一个或一系列的元组类型: id +最近日期。我对此非常陌生,我会感谢你的帮助。下面是一些代码示例。

代码语言:javascript
复制
 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()                   

我想要得到某物。类似: result= (1,2010-10-11),(2,2005-11),(3,1999-12-17),(4,2019-04-15)

也就是说,每一行的最大值,但只包含日期的列。有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 12:12:22

id列创建索引,选择带DataFrame.filter的datetimes列,获取每个行的最大值,将日期时间转换为字符串,最后将Series转换为按Series.itemslist列出的元组。

代码语言:javascript
复制
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')]

详细信息

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56477272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档