私はpython 2.7を使用しています。次のように与えられたデータから:パンダ:与えられた列のユニークな行を取得しますが、他の列の条件によっては条件付きです。
data = pd.DataFrame({'id':['001','001','001','002','002','003','003','003','004','005'],
'status':['ground','unknown','air','ground','unknown','ground','unknown','unknown','unknown','ground'],
'value':[10,-5,12,20,-12,2,-4,-1,0,6]})
データは次のようになります。
id status value
001 ground 10
001 unknown -5
001 air 12
002 ground 20
002 unknown -12
003 ground 2
003 unknown -4
003 unknown -1
004 unknown 0
005 ground 6
私は、次の基準に条件付きのユニークなIDを持っているデータフレームで出力を取得したいと思います:与えられたidには
'status': If 'air' does exist, pick 'air'.
If 'air' does not exist, pick 'ground'.
If both 'air' and 'ground' do not exist, pick 'unknown'.
'value': Sum of values for each id
'count': Count the number of rows for each id
したがって、期待される出力は次のとおりです。
id status value count
001 air 17 3
002 ground 8 2
003 ground -3 3
004 unknown 0 1
005 ground 6 1
私はそれぞれの固有IDのループ行うことができますが、それは十分にエレガントではなく、計算がデータが大きくなる場合は特に、また高価です。私はより良いpythonicスタイルとより効率的な方法をこの出力を考え出すことを知ってもいいですか?前もって感謝します。
カテゴリの列はアルファベット順に並べ替えられませんが、順序は '.astype'に渡されます。だから、それを「地面」、「空気」、「不明」に変更すると、地面が存在すれば最初の値になります。 – ayhan
私はそれを知らなかった。確かに知っておくと便利です。私はあなたの例が注文されたように読んで、コードの最初の行を見落としました。私は私の答えを若干編集します。 – josh