どのグループに複数の列によるとPythonでの条件に基づいて新しい列を作成しますか?

aeapen:

私は以下のようなデータフレームを持っていると私は列ベースの新しい列を作成したいです

調子

二つまたは複数の行が同じ列Aと列Bの値と列が含まれている場合Cは一意次に行である一意のグループ名を割り当てなければなりません

入力

A           B        C   
Payment    Mark      2  
Payment    Mark      3   
Delayed    Charles   2  
Delayed    Charles   4   
Held       Mark      3   
Held       Charles   4   
Payment    Mark      2   
Payment    Mark      3   
Delayed    Charles   4   
Held       Charles   4  

予想される出力

  A        B         C   Cluster
Payment    Mark      2   C1
Payment    Mark      3   C2
Delayed    Charles   2   C3
Delayed    Charles   4   C4
Held       Mark      3   C5
Held       Charles   4   C6
Payment    Mark      2   C1
Payment    Mark      3   C2
Delayed    Charles   4   C4
Held       Charles   4   C6

これはpythonでどのように行うことができます

anky_91:

これがあるfactorize問題。

一つの方法は、単一のシリーズに結合列となりfactorizeadd1と初めに:add C

df['Cluster'] = (pd.Series(df[['A','B','C']].astype(str).agg(''.join,1)
               .factorize()[0]).add(1).astype(str).radd('C'))
print(df)

もう一つの方法は似ていますが、となります groupby.ngroup

df['Cluster'] = (df.groupby(['A','B','C'],sort=False).ngroup()
                .add(1).astype(str).radd('C'))

         A        B  C Cluster
0  Payment     Mark  2      C1
1  Payment     Mark  3      C2
2  Delayed  Charles  2      C3
3  Delayed  Charles  4      C4
4     Held     Mark  3      C5
5     Held  Charles  4      C6
6  Payment     Mark  2      C1
7  Payment     Mark  3      C2
8  Delayed  Charles  4      C4
9     Held  Charles  4      C6

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=276034&siteId=1