Pandas Dataframe 条件和操作

问题描述 投票:0回答:1

我陷入了我正在处理的项目的一部分,我有一个包含多个列的数据框,我想根据两个条件用另一列的值填充一列。

下面我尝试给出我的数据框的示例:我想将月份的最后一天添加到 Col [ ValuedteTo ] 中,该日期基于 Col [ Value Dte ] 中的日期(如果 Col [ Market ] 值)等于 EEX 或 ICE(或者简单地如果 Col [ ValuedteTo ] 为空,则添加日期)

很多 合同 价值数据 值得 市场
-10 2024-03 2024-03-01 EEX
10 2024-05 2024-05-01
-25 2024-10 2024-10-01
250 2024-11 2024-11-01 2024-11-10 场外交易
30 2024-02 2024-02-01 2024-02-02 场外交易
-10 2024-01 2024-01-01 EEX
-50 2024-09 2024-09-01 2024-09-30 场外交易
-80 2024-10 2024-10-01 EEX

我尝试首先创建一个函数来根据特定日期获取一个月的最后一天 然后尝试将其与以下代码行一起使用。 但没有成功

df['valueDate_To_'] = df.apply(lambda x: last_day_of_month(df['valueDate_From_'])if (x['market'] == 'EEX' or x['market'] == 'ICE') else x['valueDate_To_'], axis = 1)
def last_day_of_month(any_day):
    # The day 28 exists in every month. 4 days later, it's always next month
    next_month = any_day.replace(day=28) + datetime.timedelta(days=4)
    # subtracting the number of the current day brings us back one month
    return next_month - datetime.timedelta(days=next_month.day)
python pandas dataframe
1个回答
0
投票

如果我理解你的问题是正确的。这就是解决方案:

下次请发布您的代码的最小复制品:

假设您有数据

df = pd.DataFrame(data)
df['Value_Dte'] = pd.to_datetime(df['Value_Dte'])
df['ValuedteTo'] = pd.to_datetime(df['ValuedteTo'], errors='coerce')

您给出的代码没有从日期时间对象中提取日期,我已经对此进行了修改。

def last_day_of_month(any_day):
    next_month = any_day.replace(day=28) + timedelta(days=4)
    return (next_month - timedelta(days=next_month.day)).date()


def fill_valuedteto(row):
    if pd.isnull(row['ValuedteTo']) and row['Market'] in ['EEX', 'ICE']:
        return last_day_of_month(row['Value_Dte'])
    else:
        return row['ValuedteTo']

df['ValuedteTo'] = df.apply(fill_valuedteto, axis=1)

这应该是它,或者如果你想要它与你的片段一起

df['valueDate_To_'] = df.apply(lambda x: last_day_of_month(x['ValuedteTo']) if (x['Market'] == 'EEX' or x['Market'] == 'ICE') else x['ValuedteTo'], axis=1)

请更改列名称,因为您没有提供可重现的示例来创建数据框。

© www.soinside.com 2019 - 2024. All rights reserved.