2016-12-28 11 views
3

別の列が空の場合、更新が必要なデータフレーム内に列があります。列は 'subscriberkey'で、すでに値が入っています。これらの値を文字列+数値で更新する必要があります。私の意図は重複する列を作成することではありません。文字列を追加+自動インクリメント - pandas、python

この値はユニークである必要があります。そのため、最初に文字列+数値を追加すると、行く方法になると思ったのはなぜですか。 2行目

Age Email   Subscriberkey 
10 [email protected] giririfndfieir 
23     kfkkfkfffrrrc 
64 [email protected] ifiririieiriei  

、私はsubscriberkeyは、これまでのところ、文字列+数字+文字列 になりたい、私は次のことを試してみました:

df.loc[df.Email == NULL, 'subscriberkey']= 'string'+.cumcount()+1+'string' 

私は達成するためにどのよう最善のポインタを感謝しますこの。

+2

考えますか? 再現可能な例をまとめることはできますか? – PabTorre

+0

これを反映するために質問を編集します。 –

+0

私の質問に編集しました –

答えて

4

あなたはこのような何かしてみてください可能性があります

nullCond = df.Email.isnull()  
# or nullCond = (df.Email == "") it those are empty strings 

df.loc[nullCond, 'Subscriberkey'] = "string" + nullCond[nullCond].cumsum().astype(str) + "string" 

enter image description here

+0

ありがとうございました。私が試したときにエラーが発生しました:**暗黙的に 'list 'オブジェクトをstrに変換できません** –

+0

型変換部を更新しました。 intを 'stype()'でstrに変換する必要がある場合は、それが機能するかどうかを確認することができます。 – Psidom

+0

答えをありがとう。これはうまくいった。私は若干異なる要求があります。新しい質問を開くかどうかわかりません。私が文字列+番号ieを与えるために加入者キーのすべてのcollumnにラベルを付けたいと仮定します。いいえ、私はそれについてどうやって行くのですか? –

0

は、あなたが何のエラーを取得しているdf

df = pd.DataFrame(dict(EMAIL_ACQ_DT=['key1', None, 'key2', None, 'ke3', 'key4', None, None])) 
print(df) 

    EMAIL_ACQ_DT 
0   key1 
1   None 
2   key2 
3   None 
4   ke3 
5   key4 
6   None 
7   None 

fill_keys = df.groupby(df.EMAIL_ACQ_DT.isnull()).cumcount().apply('key{}_'.format) 
df['subscriberkey'] = df.EMAIL_ACQ_DT.fillna(fill_keys) 
print(df) 

    EMAIL_ACQ_DT subscriberkey 
0   key1   key1 
1   None   key0_ 
2   key2   key2 
3   None   key1_ 
4   ke3   ke3 
5   key4   key4 
6   None   key2_ 
7   None   key3_ 
+0

これはResponsysからのものかどうか不思議ですか? –

+0

@Data_Kidあなたが何を話しているのか分かりません...だから、私は思っていません:-) – piRSquared

関連する問題