2016-07-15 4 views
1

を用いて一つの列、その列は、0又はここ
1は一例であるのみであり得るlabelphonelabelある:パンダデータフレーム更新Iは、2列のデータフレーム<code>df</code>を有する別の列

phone label 
    a  0 
    b  1 
    a  1 
    a  0 
    c  0 
    b  0 

私がしたいのは、それぞれのタイプの「電話」の数を計算し、その番号を使用して「電話」の列を置き換えることです。 私はgroupbyですが、それに慣れていません。

T彼は答える必要があります:

Count the number of each 'phone' 
phone count 
    a   1 
    b   1 
    c   0 

replace the 'phone' with 'count' in the original table 
phone 
    1 
    1 
    1 
    1 
    0 
    1 
+0

label列のみ0または1を持つことができ、アカウントにINGの、あなたは.trasnform('sum')メソッドを使用することができます。指定されたラベルの「電話」の行数== 1 ?? –

+0

お望みですか? 'df.groupby ['phone']。sum()'? – bernie

+0

しかし、私はどのように '電話'を 'sum'と置き換えることができます – Fan

答えて

1

tak

In [4]: df.label = df.groupby('phone')['label'].transform('sum') 

In [5]: df 
Out[5]: 
    phone label 
0  a  1 
1  b  1 
2  a  1 
3  a  1 
4  c  0 
5  b  1 

説明:あなたはありません検索したい

In [2]: df 
Out[2]: 
    phone label 
0  a  0 
1  b  1 
2  a  1 
3  a  0 
4  c  0 
5  b  0 

In [3]: df.groupby('phone')['label'].transform('sum') 
Out[3]: 
0 1 
1 1 
2 1 
3 1 
4 0 
5 1 
dtype: int64 
0

パンダのデータをフィルタリングしてグループ化することができます。データフレームの新しい列としてcountを取得するには

#first filter to get only label==1 rows 
phone_rows_label_one_df = df[df.label==1] 

#then do groupby 
phone_rows_label_one_df.groupby(['phone'])['label'].count() 

phone 
a 2 
b 1 
c 1 
d 1 

- あなたのケースのために、それは

がデータを使用すると、phonesのグループ数が、その後これを行うlabel==1を与えられた必要な場合

phone label 
0  a  0 
1  b  1 
2  a  1 
3  a  1 
4  c  1 
5  d  1 
6  a  0 
7  c  0 
8  b  0 

df.groupby(['phone','label'])['label'].count() 
phone label 
a  0  2 
     1  2 
b  0  1 
     1  1 
c  0  1 
     1  1 
d  1  1 

されているとなりますこれを行う

phone_rows_label_one_df.groupby(['phone'])['label'].count().reset_index(name='count') 
    phone count 
0  a  2 
1  b  1 
2  c  1 
3  d  1 
+0

実際には、ラベル== 1を与えられたそれぞれのタイプの「電話」の行数を調べたいのですが: – Fan

+0

'カウントと元のテーブルに? – Fan

+0

@ファンが完了しました。パンダは素晴らしいです! –

関連する問題