2017-04-21 3 views
1

私は、次のサンプルの表を以下に示している:以下の基準で「最近の収入」:新しい列の計算は

enter image description here

は、私は次の列を作成したいです(所望の結果については、以下の表を参照)
a。 DateがAccountによって最大日付でない場合、新しい列は0となります。
b。

df_MF_12mos.iloc[df_MF_12mos.groupby('Account')['Date'].agg(pd.Series.idxmax)] 

例外TypeError:日付はアカウントによって最大の日付である場合は...その後、新しい列が

enter image description here

収益

に等しいこれは私がこれまで試してみましたが、それは動作しませんでしたコードです。無効なタイプのプロモーション

何か助けていただければ幸いです!

答えて

0
df['Most Recent Revenue'] = df.groupby('Account').apply(lambda x: x.where(x['Date']==(x['Date']).max()))['Revenue'].fillna(0).astype(int) 

print (df) 

出力:

Account  Date Revenue Most Recent Revenue 
0  A 2017-02-28  100     0 
1  A 2017-03-31  300     300 
2  B 2016-01-13  500     0 
3  B 2016-02-29  200     0 
4  B 2016-03-31  10     10 
+0

これは素晴らしい仕事!ありがとうございました :) – PineNuts0

1
# generate sample df 
account = ['A','A','B','B','B'] 
date = pd.to_datetime(['02/28/2017','03/31/2017','01/13/2016', 
         '02/29/2016','03/31/2016']) 
revenue = [100,300,500,200,10] 
df = pd.DataFrame({'Account':account,'Date':date,'Revenue':revenue}) 

# compute Most Recent Revenue 
def most_recent_rev(rows): 
    return (rows.Date == rows.Date.max()) * rows.Revenue 

df['Most Recent Revenue'] = (df.groupby(['Account']) 
           .apply(most_recent_rev) 
           .values) 

収量:

Account  Date Revenue Most Recent Revenue 
0  A 2017-02-28  100     0 
1  A 2017-03-31  300     300 
2  B 2016-01-13  500     0 
3  B 2016-02-29  200     0 
4  B 2016-03-31  10     10 
関連する問題