【问题标题】:Add column entry if certain date, Pandas如果某个日期,Pandas 添加列条目
【发布时间】:2021-10-19 10:35:52
【问题描述】:

我正在使用下面的数据框,并尝试根据一些条件添加一个包含注释的新列。

条件 1:支出 = Y

条件2:Ccy=Mgd Ccy

条件3:如果日期是今天+1,则在注释列中添加“注释1”,如果日期是今天+2,则在注释列中添加“注释2”

感谢您的任何帮助

dataframe

【问题讨论】:

  • df.where, np.where, np.select

标签: python pandas date datetime


【解决方案1】:

你可以试试这个:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Amount': [1, 2, 3], 'Ccy': ['EUR', 'EUR', 'CHF'], 'Mgd Ccy': ['EUR', 'EUR', 'EUR'], 'Spend': ['Y', 'Y', 'Y'], 'Date':pd.date_range("2021-08-17", periods=3, freq="D")})
df = df[(df['Date'] == (pd.datetime.now() + timedelta(days=1)).strftime("%Y/%m/%d")) | (df['Date'] == (pd.datetime.now() + timedelta(days=2)).strftime("%Y/%m/%d") ) ]
df['new_column'] = np.where((df.Spend == 'Y') & (df['Ccy'] == df['Mgd Ccy']) & (df['Date'] == (pd.datetime.now() + timedelta(days=1)).strftime("%Y/%m/%d")), 'Note 1', 'Note 2')
df

结果是:

Amount Ccy Mgd Ccy Spend Date new_column
2 EUR EUR Y 2021-08-18 Note 1
3 CHF EUR Y 2021-08-19 Note 2

【讨论】:

  • 我试图仅填充该行中日期为 18 日或 19 日的单元格,因此理想情况下第一行为空白,第二行包含 Note1,第三行包含 Note2
  • @BrianTheMoose 我更正了代码;)希望对您有所帮助
【解决方案2】:

首先,您需要确保 Date 列是 datetime via:

data['Date'] = pd.to_datetime(data['Date'])

然后,减去所需的日期并加上提取天数的差异:

data['Differences'] = (data['Date'] - pd.Timestamp('today')).dt.days

最后,用data.loc[conditions, column_name]的一般格式进行一些条件选择:

data.loc[(data['Spend'] == 'Y') & (data['Ccy'] == data['Mgd Ccy']),
         'notes'] = data['Differences'].apply(lambda x: 'Note ' + str(x))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多