比较pandas中的两列来更新数据框架中的date列



我需要将一列的特定范围的值与另一列中的特定字符串进行比较,以将日期列更新为1,7,30天

Col A    ColB           colc
5          Internal     1-1-2022
7          external     1-1-2022
4          external     1-1-2022
3          external     1-1-2022

因此,如果df[ColA]<8df[ColB]=External使df[colc]增加7天。如果df[ColA]>=8df[ColB]=External使df[colc]增加30天,如果df[ColB]=Internal使df[colc]增加120天

您可以使用numpy.select来处理所有条件:

我将它们简化为:

  • 如果ColB是"内部的";→添加120天
  • else,如果ColA≤8 ->add 7 days
  • 其他→添加30天
factor = np.select([df['ColB'].eq('Internal'), df['Col A'].le(8)], [120, 7], 30)
df['new'] = (pd.to_datetime(df['colc'], dayfirst=True)
.add(pd.DateOffset(days=1)*a)
.dt.strftime('%-d-%-m-%-Y')
)

输出:

Col A      ColB      colc       new
0      5  Internal  1-1-2022  3-1-2022
1      7  external  1-1-2022  6-1-2022
2      4  external  1-1-2022  1-1-2022
3      3  external  1-1-2022  3-1-2022

使用与@mozway相同的np.select,我建议使用pd.Timedelta

df = pd.DataFrame(
{
'Col A': [5, 7, 4, 3], 
'ColB': ['Internal', 'external', 'external', 'external'], 
'colc': pd.to_datetime("1/1/2022", format="%m/%d/%Y")
}
)
df['colc'] = [
(a + pd.Timedelta(b, 'd')) for (a, b) in
zip(df.colc, np.select([df['ColB'].eq('Internal'), df['Col A'].le(8)], [120, 7], 30))
]
print(df)

结果:

Col A      ColB       colc
0      5  Internal 2022-05-01
1      7  external 2022-01-08
2      4  external 2022-01-08
3      3  external 2022-01-08

最新更新