在Pandas DF行中查找最小日期并创建新列

2024-03-29 12:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张有很多日期的桌子(有些日期是南),我需要找到最早的日期 因此,行可能有日期修改、撤回日期、出售日期、状态日期等。。

因此,对于每一行,在一个或多个字段中都会有一个日期,我希望找到其中最早的字段,并在dataframe中创建一个新列。

像这样的事情,如果我只做一个,如日期修改,我得到一个结果,但当我添加第二个如下

table['END_DATE']=min([table['DATE_MODIFIED']],[table['SOLD_DATE']])

我得到:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

因此,假设我最初创建了正确的日期列,那么这个构造是否能够找到最小日期?


Tags: ofthedataframedatevalue状态tablemin
3条回答

如果table是您的数据帧,则在相关列上使用其min方法:

table['END_DATE'] = table[['DATE_MODIFIED','SOLD_DATE']].min(axis=1)

与费利克斯·祖姆斯坦的稍有不同

table['END_DATE'] = table[['DATE_MODIFIED','SOLD_DATE']].min(axis=1).astype('datetime64[ns]')

为了避免获得日期的float64表示,当前版本的熊猫(2015年7月)需要astype('datetime64[ns]')

只需沿轴1应用min函数。

In [1]: import pandas as pd 
In [2]: df = pd.read_csv('test.cvs', parse_dates=['d1', 'd2', 'd3'])
In [3]: df.ix[2, 'd1'] = None
In [4]: df.ix[1, 'd2'] = None
In [5]: df.ix[4, 'd3'] = None
In [6]: df
Out[6]:
                   d1                  d2                  d3
0 2013-02-07 00:00:00 2013-03-08 00:00:00 2013-05-21 00:00:00
1 2013-02-07 00:00:00                 NaT 2013-05-21 00:00:00
2                 NaT 2013-03-02 00:00:00 2013-05-21 00:00:00
3 2013-02-04 00:00:00 2013-03-08 00:00:00 2013-01-04 00:00:00
4 2013-02-01 00:00:00 2013-03-06 00:00:00                 NaT
In [7]: df.min(axis=1)
Out[7]:
0   2013-02-07 00:00:00
1   2013-02-07 00:00:00
2   2013-03-02 00:00:00
3   2013-01-04 00:00:00
4   2013-02-01 00:00:00
dtype: datetime64[ns]

相关问题 更多 >