2016-10-20 19 views
1

私は次のようであるデータフレームを持っている:Pandasデータフレーム内でループを実行して列を追加するにはどうすればよいですか?

MID  POSITION 
1 22596394  R8 

2 22596394  R8 

3 22596394  R8 

4 22591549  R6 

5 22591549  R6 

6 22591549  R6 

今、私は次のようになりますいくつかのコードを実行した後に出力されます別のデータフレームがあります。

Position  Usage 
R1    0 
R2    0 
R3    0 
R4    0 
R5    0 
R6    1 
R7    0 
R8    1 
L1    0 
L2    0 
L3    0 
...   
L8    0 

を私はしたいと思います

MIDが変化するところでは、対応するPOSITIONに注意し、出力データフレームに対応するUsage行を入力します。例:上記のデータフレームでは、R8とR6 Usa同様に、同じ位置に対してMIDが2回変化する場合、R6 Usage RowsはR6を2で埋めなければならないと言います。これを行う最善の方法は何でしょうか?前もって感謝します!

+2

入力から目的の出力を追加できますか? – jezrael

+0

出力データフレームを更新しました。ポジションがまだR6となっているときにMIDが2回変更されたとすると、より明確にすることができます。次に、R6に対応する使用行に2を書き込む必要があります。ありがとう! – Ruffy26

+0

Hmmmですが、 'R6'でも 'R8'でも 'MID'は変更されません。同じ値の3倍です。 – jezrael

答えて

1

私はあなたがnunique、その後reindexが必要だと思う:

print (df1.groupby('POSITION')['MID'].nunique()) 
POSITION 
R6 1 
R8 1 
Name: MID, dtype: int64 

print (df1.groupby('POSITION')['MID'] 
      .nunique() 
      .reindex(df2.set_index('Position').index, fill_value=0) 
      .rename('Usage') 
      .reset_index()) 
    Position Usage 
0  R1  0 
1  R2  0 
2  R3  0 
3  R4  0 
4  R5  0 
5  R6  1 
6  R7  0 
7  R8  1 
8  L1  0 
9  L2  0 
10  L3  0 

説明:

グループごとに一意の値の数をgetingのために列POSITIONgroupbyを必要とし、その後、カラムMIDnuniqueをaggreagate。あなたはインデックスR6R8で新しいSeriesを取得します。その後、別の値をdf2とカラムPositionから追加する必要があります。値が一意である場合、indexpositionからset_indexを作成し、次にreindexの値をindexdf2に作成します。 を取得し、0(パラメータfill_value=0)に置き換えます。次に、インデックスから新しい列を作成する必要があります。Seriesの名前を最初に変更します。renameと最後のreset_indexは、DataFrameとなります。

+0

Usage列を埋めることを前提にして、Position(df2.set_index( 'Position')。index、fill_value = 0)ではなく、Usageでなければなりませんか? – Ruffy26

+0

通常通り動作します。再度、感謝します! – Ruffy26

+1

うれしいことができますよ!いい日! – jezrael

関連する問題