Python 对一列应用条件语句以在另一列中获得结果

Python 对一列应用条件语句以在另一列中获得结果,python,pandas,Python,Pandas,我正试图写一个脚本,将增加4个月或8个月的列标题为“日期”取决于列标题为“季度调用”。例如,如果季度调用中的值为2,则在“日期”列中添加4个月,如果值为3,则添加8个月。最后,我希望在标题为“New Date”的列中显示输出 到目前为止,我能够使用这段代码添加我想要的月数: from datetime导入日期 从dateutil.relativedelta导入relativedelta 新建日期=[] df['Date']=df['Date'].dt.normalize() 对于df['Date

我正试图写一个脚本,将增加4个月或8个月的列标题为“日期”取决于列标题为“季度调用”。例如,如果季度调用中的值为2,则在“日期”列中添加4个月,如果值为3,则添加8个月。最后,我希望在标题为“New Date”的列中显示输出

到目前为止,我能够使用这段代码添加我想要的月数:

from datetime导入日期
从dateutil.relativedelta导入relativedelta
新建日期=[]
df['Date']=df['Date'].dt.normalize()
对于df['Date']中的值:
新增日期。追加(值+相对时间(月=+4))
df['New Date']=新日期

但是,正如我所提到的,我希望这取决于季度调用c中的值,因此我尝试编写以下代码:

df['Quarterly_Call_uuc']中的i的
类型(int).to_list():
如果i==2:
对于df['Date']中的值:
新增日期。追加(值+相对时间(月=+4))
elif i==3:
对于df['Date']中的值:
新增日期。追加(值+相对时间(月=+8))

不幸的是,这不起作用。你能推荐一个解决方案吗?谢谢

您可以在数据帧上尝试lambda函数。例如:

将熊猫作为pd导入
数字={'set_of_numbers':[1,2,3,4,5,6,7,8,9,10]}
df=pd.DataFrame(数字、列=['set\u of_numbers'])

df['equal_或_lower_than_4?']=df['set_of_numbers']。应用(lambda x:True),如果x您可以在数据帧上尝试lambda函数。例如:

将熊猫作为pd导入
数字={'set_of_numbers':[1,2,3,4,5,6,7,8,9,10]}
df=pd.DataFrame(数字、列=['set\u of_numbers'])

df['equal_或_lower_than_4?']=df['set_of_numbers']。应用(lambda x:'True',如果x对数据帧上的每一行使用lambda表达式似乎是最方便的方法:

定义日期计算(q,d): 如果q==2: 返回d+相对LTA(月数=+4) 其他: 返回d+相对LTA(月数=+8) df['New Date']=df.apply(λx:Date_calc(x['Quarterly_Call__c'],x['Date']),axis=1)
date_calc函数保存与您在问题中发布的逻辑相同的逻辑,同时将输入作为参数,并且DataFrame的apply方法用于计算每行的“New date”列,其中lambda表达式的变量x表示DataFrame的一行


请记住,将axis参数指定为1可以确保函数应用于数据帧的每一行而不是每一列。可以找到有关apply方法的更多信息。

对数据帧上的每一行使用lambda表达式似乎是最方便的方法:

定义日期计算(q,d): 如果q==2: 返回d+相对LTA(月数=+4) 其他: 返回d+相对LTA(月数=+8) df['New Date']=df.apply(λx:Date_calc(x['Quarterly_Call__c'],x['Date']),axis=1)
date_calc函数保存与您在问题中发布的逻辑相同的逻辑,同时将输入作为参数,并且DataFrame的apply方法用于计算每行的“New date”列,其中lambda表达式的变量x表示DataFrame的一行


请记住,指定为1的axis参数可以确保函数应用于DataFrame的每一行而不是每一列。可以找到有关apply方法的更多信息。

您可以逐行迭代访问行数据,并计算新日期

import pandas as pd
from dateutil.relativedelta import relativedelta

df = pd.DataFrame({
    'Quarterly_Call__c': [2,3,2,3], 
    'Date': ['2021-02-25', '2021-03-25', '2021-04-25', '2021-05-25']
})
df['Date'] = pd.to_datetime(df['Date'])
df['New Date'] = ''   #new empty column

for i in range(len(df)):
    if df.loc[i, 'Quarterly_Call__c'] == 2:
        df.loc[i, 'New Date'] = df.loc[i, 'Date'] + relativedelta(months=+4)
    if df.loc[i, 'Quarterly_Call__c'] == 3:
        df.loc[i, 'New Date'] = df.loc[i, 'Date'] + relativedelta(months=+8)
df['New Date'] = df['New Date'].dt.normalize()
输出

    Quarterly_Call__c   Date        New Date
0                   2   2021-02-25  2021-06-25
1                   3   2021-03-25  2021-11-25
2                   2   2021-04-25  2021-08-25
3                   3   2021-05-25  2022-01-25

您可以逐行迭代访问行数据,并计算新日期

import pandas as pd
from dateutil.relativedelta import relativedelta

df = pd.DataFrame({
    'Quarterly_Call__c': [2,3,2,3], 
    'Date': ['2021-02-25', '2021-03-25', '2021-04-25', '2021-05-25']
})
df['Date'] = pd.to_datetime(df['Date'])
df['New Date'] = ''   #new empty column

for i in range(len(df)):
    if df.loc[i, 'Quarterly_Call__c'] == 2:
        df.loc[i, 'New Date'] = df.loc[i, 'Date'] + relativedelta(months=+4)
    if df.loc[i, 'Quarterly_Call__c'] == 3:
        df.loc[i, 'New Date'] = df.loc[i, 'Date'] + relativedelta(months=+8)
df['New Date'] = df['New Date'].dt.normalize()
输出

    Quarterly_Call__c   Date        New Date
0                   2   2021-02-25  2021-06-25
1                   3   2021-03-25  2021-11-25
2                   2   2021-04-25  2021-08-25
3                   3   2021-05-25  2022-01-25