Python 数据框:我想根据另一列的结果添加一个新列

Python Data frame: I want to add a new column based on the result of another column

提问人:cathal 提问时间:11/8/2023 最后编辑:FObersteinercathal 更新时间:11/8/2023 访问量:58

问:

我有一个“日期”列和“时间”列。

我想创建一个新列“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 时

Python Pandas DataFrame DateTime 条件语句

评论

0赞 Stitt 11/8/2023
你有问题吗?

答:

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...)。