pandas 在 Dataframe 中,将一列中的最后2个日期替换为“第2天”和“第1天”,以使代码动态化

d5vmydt9  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(136)

我有这样一个 Dataframe ,其中列日期是最近的2个工作日(因此,当我运行代码时,它们每天都在更改),格式为日期时间

shortCode       date  ...       value TCE value
shortCode                            ...                      
A6TCE     4858     A6TCE 2022-12-19  ...         NaN   89857.0
          4859     A6TCE 2022-12-20  ...         NaN   80632.0
S2TCE     4370     S2TCE 2022-12-19  ...         NaN  103858.0
          4371     S2TCE 2022-12-20  ...         NaN   94453.0
TD1       242        TD1 2022-12-19  ...       56.44   27654.0
          243        TD1 2022-12-20  ...       54.89   24594.0

我想写一个代码,动态计算列值和TCE值的每日值变化。
最简单的方法是什么?目前我想透视df并计算新列的差异,但我希望首先替换日期(如果您认为这没有必要,请告诉我,因为目的是稍后添加每日值的变化)
理想外观

shortCode     date  ...       value TCE value
shortCode                            ...                      
A6TCE     4858     A6TCE 1st day  ...         NaN   89857.0
          4859     A6TCE 2nd day  ...         NaN   80632.0
S2TCE     4370     S2TCE 1st day  ...         NaN  103858.0
          4371     S2TCE 2nd day  ...         NaN   94453.0
TD1       242        TD1 1st day  ...       56.44   27654.0
          243        TD1 2nd day  ...       54.89   24594.0
eaf3rand

eaf3rand1#

首先,因为您只对年-月-日感兴趣,所以请将datetime列替换为日期的截断字符串表示形式,去掉小时/分钟/秒部分:

df["date"] = df["date"]].dt.strftime("%Y-%m-%d")

然后,您可以使用这两个值及其对应的日Map创建字典:

days= dict(zip(sorted(df["date"].unique()),["1st day","2nd day"]))

然后,您可以将此字典应用到您的专栏:

df["date"] = df["date"].apply(lambda x: days[x])
oxcyiej7

oxcyiej72#

first_day=df["date"].min()
second_day=df["date"].max()

condition= [ df["date"]==first_day,df["date"]==second_day]
values= ['1st day','2nd day']

df['date']=np.select(condition,values)

相关问题