我有以下内容:
Admnistação
我正尝试返回df2(行='Amount',列= Date_Range),其中:
df1['Effective_Date']
df1['Amount']
Date_Range = pd.date_range('12/31/2017', periods=150, freq='M')
例如金额= $ 100,生效日期= 3/1/18,则它将在2/28/18及之前返回$ 0,并在3/31 / 18、4 / 30 / 18、5 / 31/18等返回$ 100 < / p>
我要用df1 ['Amount']填充数据框,然后尝试从生效日期之前撤回所有金额:
要创建数据框:
if df1['Effective_Date'] > Date_Range, return 0
要使>有效日期= 0:
df2 = pd.DataFrame(df1['Amount'], columns = Date_Range)
我收到以下错误:
我显然是业余爱好者。非常感谢您的帮助。
答案 0 :(得分:1)
为此,您可以将df1
的“有效日期”列与Date_Range
的numpy中的less_equal
和ufunc.outer
结合使用,并与“金额”:
import numpy as np
df2 = pd.DataFrame( np.less_equal.outer(df1.Efective_Date, Date_Range)
*df1.Amount.values[:,None],
columns = Date_Range)
以示例:
df1 = pd.DataFrame({'Efective_Date':pd.to_datetime(['01/26/2018', '04/22/2018', '03/28/2018']),
'Amount':[100,150,300]})
print(df1)
# Amount Efective_Date
#0 100 2018-01-26
#1 150 2018-04-22
#2 300 2018-03-28
Date_Range = pd.date_range('01/31/2018', periods=6, freq='M')
print(Date_Range)
#DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
# '2018-05-31', '2018-06-30'], dtype='datetime64[ns]', freq='M')
那么df2
将是:
print (pd.DataFrame( np.less_equal.outer(df1.Efective_Date, Date_Range)
*df1.Amount.values[:,None],
columns = Date_Range))
# 2018-01-31 2018-02-28 2018-03-31 2018-04-30 2018-05-31 2018-06-30
#0 100 100 100 100 100 100
#1 0 0 0 150 150 150
#2 0 0 300 300 300 300