通过比较当前行列与熊猫中的下一行列来获取最小日期值

时间:2019-02-14 14:48:11

标签: python pandas dataframe

enter image description here

我有3列的pandas df:col1col2col3。在某些情况下,第1列和第3列中的值可能为空。 col2列开始为空。目标是填充col2。我想迭代每一行,以将当前行的每个col3值与下一行的col1进行比较。 col2应该成为最小的日期值(如图中所示)。

如何在熊猫中做到这一点?

2 个答案:

答案 0 :(得分:1)

np.minshift一起使用

样本数据

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1': ['2013-12-19', '2014-12-16', '2015-02-06', '2016-01-22', 
                            '2016-02-24', '2016-04-25', '2017-04-13'],
                   'col3': ['2014-06-28', '2015-10-07', '2015-07-19', '2016-02-11', 
                            '2016-04-28', '2017-02-28', '2018-02-15']})
df = df.apply(pd.to_datetime)

代码

df['col2'] = np.min([df.col1.shift(-1).values, df.col3.values], axis=0)

输出df

        col1       col3       col2
0 2013-12-19 2014-06-28 2014-06-28
1 2014-12-16 2015-10-07 2015-02-06
2 2015-02-06 2015-07-19 2015-07-19
3 2016-01-22 2016-02-11 2016-02-11
4 2016-02-24 2016-04-28 2016-04-25
5 2016-04-25 2017-02-28 2017-02-28
6 2017-04-13 2018-02-15 2018-02-15

答案 1 :(得分:0)

抱歉,我误解了您的问题。我承认我略读了-抱歉!

这应该有效...

for idx in range(len(df)-1):
    df.loc[idx, 'col2'] = min(df.loc[idx, 'col3'], df.loc[idx+1, 'col1'])

由于偏移迭代,这会将col2中的最后一个值保留为nan

让我知道是否有帮助!