私は次のものを持っています:
df1['Effective_Date']
df1['Amount']
Date_Range = pd.date_range('12/31/2017', periods=150, freq='M')
df2(rows = 'Amount'、columns = Date_Range)を返そうとしています。ここで:
if df1['Effective_Date'] > Date_Range, return 0
たとえば、金額= $ 100および発効日= 3/1/18の場合、2/28/18以前には$ 0が返され、3/31 / 18、4 / 30 / 18、5 / 31/18などでは$ 100が返されます。
データフレームにdf1 ['Amount']を入力してから、発効日より前に金額を取り消そうとしました。
データフレームを作成するには:
df2 = pd.DataFrame(df1['Amount'], columns = Date_Range)
>発効日= 0にするには:
df2[df1['Effective_Date'].astype(int) > df2] = 0
次のエラーが発生します。
私は明らかにアマチュアです。手伝ってくれてどうもありがとう。
これを行うには、使用することができますless_equal
とufunc.outer
列「EFFECTIVE_DATE」の間でnumpyのからdf1
とDate_Range
、そのあなたの乗算列「量」は:
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加