提问人:cathal 提问时间:11/8/2023 最后编辑:FObersteinercathal 更新时间:11/8/2023 访问量:58
Python 数据框:我想根据另一列的结果添加一个新列
Python Data frame: I want to add a new column based on the result of another column
问:
我有一个“日期”列和“时间”列。
我想创建一个新列“Tradedate”,并取决于以下条件:
如果 “Time” = 23:00:00,则在 “Date” 中添加一天并在 “Tradedate” 列中返回结果,否则在 “Tradedate” 列中返回 “Date” 结果
import pandas as pd
import datetime as dt
df = pd.DataFrame({"Date": ["2021/01/01","2021/01/01","2021/01/02"], "Time": ["22:00:00","23:00:00","00:00:00"]})
df["Date"] = pd.to_datetime(df["Date"])
df.info()
def trade_date(convert):
for x in convert:
if x == "23:00:00":
return df["Date"] + pd.DateOffset(days=1)
else:
return df["Date"]
#df["Tradedate"] = df["Time"].apply(trade_date)
df["Tradedate"] = trade_date(df["Time"])
#trade_date(df["Time"])
为什么我的函数不起作用? 相反,我只得到初始日期,而不是日期 +1,当时间 = 23:00:00 时
答:
0赞
Ömer Sezer
11/8/2023
#1
请简化代码,如下所示。我希望它能如你所愿。
法典:
df["Date"] = pd.to_datetime(df["Date"])
def trade_date(row):
if row["Time"] == "23:00:00":
return (row["Date"] + pd.DateOffset(days=1)).strftime('%Y/%m/%d')
else:
return row["Date"].strftime('%Y/%m/%d')
df["Tradedate"] = df.apply(trade_date, axis=1)
df["Date"] = df["Date"].dt.strftime('%Y/%m/%d')
print(df)
输出:
Date Time Tradedate
0 2021/01/01 22:00:00 2021/01/01
1 2021/01/01 23:00:00 2021/01/02
2 2021/01/02 00:00:00 2021/01/02
评论
0赞
Ömer Sezer
11/14/2023
@cathal如果您喜欢该解决方案,并且您投赞成票和/或接受它,我会很高兴,谢谢。
0赞
FObersteiner
11/8/2023
#2
您可以使用 where 条件:
import pandas as pd
df = pd.DataFrame({"Date": ["2021/01/01","2021/01/01","2021/01/02"], "Time": ["22:00:00","23:00:00","00:00:00"]})
df["Date"] = pd.to_datetime(df["Date"])
df["Tradedate"] = df["Date"].where(df['Time'] != "23:00:00", df['Date'] + pd.DateOffset(days=1))
df
Date Time Tradedate
0 2021-01-01 22:00:00 2021-01-01
1 2021-01-01 23:00:00 2021-01-02
2 2021-01-02 00:00:00 2021-01-02
请注意,逻辑是“替换条件为 False 的值”(强调 False...)。
评论