【发布时间】:2021-10-19 10:35:52
【问题描述】:
我正在使用下面的数据框,并尝试根据一些条件添加一个包含注释的新列。
条件 1:支出 = Y
条件2:Ccy=Mgd Ccy
条件3:如果日期是今天+1,则在注释列中添加“注释1”,如果日期是今天+2,则在注释列中添加“注释2”
感谢您的任何帮助
【问题讨论】:
-
df.where, np.where, np.select
标签: python pandas date datetime
我正在使用下面的数据框,并尝试根据一些条件添加一个包含注释的新列。
条件 1:支出 = Y
条件2:Ccy=Mgd Ccy
条件3:如果日期是今天+1,则在注释列中添加“注释1”,如果日期是今天+2,则在注释列中添加“注释2”
感谢您的任何帮助
【问题讨论】:
标签: python pandas date datetime
你可以试试这个:
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 |
【讨论】:
首先,您需要确保 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))
【讨论】: