文字列と数値の混在するデータフレームで、部分重複行を任意の形で統合したい。
(Windows10, Python3.8.6)
ある実験について、下記のようなデータフレーム(d0)があり、"ExNo"が同一のもの同士を統合したいです。
"ExNo"が「実験番号」、"M1" ~ "M3_wt%"が「実験条件」、"Result"が「実験結果」です。
|ExNo|M1|M1_wt%|M2|M2_wt%|M3|M3_wt%|Result|
|--|--|--|--|--|--|
Ex1|A|50|X|25|P|25|0.95|
Ex1|A|50|X|25|P|25|1|
Ex2|A|75|Y|12.5|P|12.5|0.6|
Ex2|A|75|Y|12.5|P|12.5|0.7|
Ex3|B|50|Z|25|Q|25|1.5|
Ex3|B|50|Z|25|Q|25|1.5|
Ex3|B|50|Z|25|Q|25|1.6|
この時、実験番号(実験条件でもよい)が同一の行を統合し、実験結果は統合されたデータの平均値として、下のようなアウトプット(newdata)を得たいです。
ExNo|M1|M1_wt%|M2|M2_wt%|M3|M3_wt%|Result|
|--|--|--|--|--|--|
Ex1|A|50|X|25|P|25|0.98|
Ex2|A|75|Y|12.5|P|12.5|0.65|
Ex3|B|50|Z|25|Q|25|1.53|
以下のコードで無理やり実装することはできたのですが、列名と処理内容を逐一記述しなくてもいい方法があれば知りたいです。
Python
1def f(x): 2 d = {'M1': list({v for v in x['M1']})[0], 3 'M1_wt%' : x['M1_wt%'].mean(), 4 'M2': list({v for v in x['M2']})[0], 5 'M2_wt%' : x['M2_wt%'].mean(), 6 'M3': list({v for v in x['M3']})[0], 7 'M3_wt%' : x['M3_wt%'].mean(), 8 'Result' : x['Result'].mean() 9 } 10 return pd.Series(d) 11 12newdata = d0.groupby('ExNo').apply(f)
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/16 16:50