我有3列的pandas df:col1
,col2
,col3
。在某些情况下,第1列和第3列中的值可能为空。 col2
列开始为空。目标是填充col2
。我想迭代每一行,以将当前行的每个col3
值与下一行的col1
进行比较。 col2
应该成为最小的日期值(如图中所示)。
如何在熊猫中做到这一点?
答案 0 :(得分:1)
将np.min
与shift
一起使用
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
。
让我知道是否有帮助!