【问题标题】:Increment a Pandas Dataframe Column Based on Date根据日期增加 Pandas 数据框列
【发布时间】:2018-03-09 13:46:06
【问题描述】:

我有这个包含日期的 pandas 数据框,我想在其上将列值(我称之为“月中”)增加 1每个月的 14 号,例如:

date        day_of_month mid_month_id
2004-05-12            12            5
2004-05-13            13            5
2004-05-14            14            6
2004-05-15            15            6

直到……时间的尽头(让我们把它放在 2020-12-31)。

但我现在拥有的是:

date        day_of_month  mid_month_id
2004-05-12            12  xxx
2004-05-13            13  xxx
2004-05-14            14  xxx
2004-05-15            15  xxx

我进行了子集化和应用:

df_test = df.loc[:,['day_of_month', 'mid_month_id']]

# Let's start at mid_month_id 7
m = 7


for i, row in df_test.iterrows():
    if df_test.loc[i, 'day_of_month'] < 14 and df_test.loc[i, 'mid_month_id'] == "xxx":
        df_test.loc[i, 'mid_month_id'] = m;
    if df_test.loc[i, 'day_of_month'] >= 14 and df_test.loc[i, 'mid_month_id'] == "xxx":
        df_test.loc[i, 'mid_month_id'] = m + 1;
    m = m + 1

df_test

它返回了从一天到下一天的增量。

然后,我尝试不使用 m = m + 1,所以值是 7 和 8 直到最后。

至少对我来说有点挑战。

感谢您的帮助

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    您可以在数据集中尝试类似的操作,使用 cumsum

    m=7
    df_test['mid_month_id'] = m+(df.day_of_month == 14).cumsum()
    
    print(m + (df.day_of_month == 14).cumsum()) 
    

    输出:

    0    7
    1    7
    2    8
    3    8
    4    8
    5    8
    6    9
    7    9
    Name: day_of_month, dtype: int32
    

    【讨论】:

    • 感谢 Scott 提供的这个 numpy 解决方案。就是这么简单。最好的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2016-06-24
    • 2017-02-06
    相关资源
    最近更新 更多