私は関係する状況に陥っています。のは、私はローンの次の例のデータフレームを持っているとしましょう:パンダグループはすべて適用
test_df = pd.DataFrame({'name': ['Jack','Jill','John','Jack','Jill'],
'date': ['2016-08-08','2016-08-08','2016-08-07','2016-08-08','2016-08-08'],
'amount': [1000.0,1500.0,2000.0,2000.0,3000.0],
'return_amount': [5000.0,2000.0,3000.0,0.0,0.0],
'return_date': ['2017-08-08','2017-08-08','2017-08-07','','2017-08-08']})
test_df.head()
amount date name return_amount return_date
0 1000.0 2016-08-08 Jack 5000.0 2017-08-08
1 1500.0 2016-08-08 Jill 2000.0 2017-08-08
2 2000.0 2016-08-07 John 3000.0 2017-08-07
3 2500.0 2016-08-08 Jack 0.0
4 2500.0 2016-08-08 Jill 0.0 2017-08-08
私は名前(人によって融資をグループ化する)ことによって、このデータフレームをグループ化した後に実行する必要があるいくつかの操作があります。
1)return amount
ニーズに割り当てられたにに比例して、の合計は、amount
である。
2)return date
の場合は与えられた人のためのANYローンのために不足している、すべてのreturn_datesは空の文字列「」に変換する必要があります。
私はすでに私が比例戻し量を配分するために使用する機能があります。
def allocate_return_amount(group):
loan_amount = group['amount']
return_amount = group['return_amount']
sum_amount = loan_amount.sum()
sum_return_amount = return_amount.sum()
group['allocated_return_amount'] = (loan_amount/sum_amount) * sum_return_amount
return group
を、私はそれを適用するためにgrouped_test_df = grouped_test_df.apply(allocate_return_amount)
を使用しています。私は苦労しています何
は、もしそうなら、私は「」に、その人のために、すべてのreturn_dates
を変え、人への融資のいずれかがreturn_date
が欠落しているかどうかをチェックする、実行する必要があり、かつ第2の動作です。
私はpandas documentationにGroupBy.allを見つけましたが、これを使った方法をまだ知りませんでしたか?
この例では、従うことが少し難しいかもしれませんので、ここではこの例のための私の理想的な出力があります:
ideal_test_df.head()
amount date name return_amount return_date
0 1000.0 2016-08-08 Jack 0.0 ''
1 1500.0 2016-08-08 Jill 666.66 2017-08-08
2 2000.0 2016-08-07 John 3000.0 2017-08-07
3 2500.0 2016-08-08 Jack 0.0 ''
4 2500.0 2016-08-08 Jill 1333.33 2017-08-08
うまくいけば、これは理にかなっている、と助けるために時間を要する任意のパンダの専門家に事前にお願いします私はアウト!
なぜ「return_amount」が「0」ですか? return_dateがないためですか? – Psidom
はい、もっと重要なことは 'return_date'は空白になります。 'return_amount'も0に変わった場合は素晴らしいですが、私は' return_date'のロジックをベースにします。 – unpairestgood