2016-05-11 3 views
1

私はパンダ0.18を使用しています。パンダに新しい列を作成せずに結合文字列を印刷しますか?

id (ods) provider 
1 (A86016)  emis 
2 (L81042)  NaN 
3 (C84013)  tpp 

なしパンダでこれを行うための簡単な方法があります:私は、出力のようにフォーマットされたテーブルをしたい

>> df = pd.DataFrame({'ods': {0: 'A86016', 1: 'L81042', 2: 'C84013', 3: 'G82228', 4: 'C81083'}, 
        'id': {0: np.nan, 1: 463061.0, 2: np.nan, 3: 462941.0, 4: np.nan}, 
        'provider': {0: 'emis', 1: np.nan, 2: 'tpp', 3: 'emis', 4: 'tpp'}}) 
>> print df 
     id  ods provider 
0  NaN A86016  emis 
1 463061.0 L81042  NaN 
2  NaN C84013  tpp 
3 462941.0 G82228  emis 
4  NaN C81083  tp 

:私はこのようになりますデータフレームを持っています新しい列を作成しますか?私はこのような何かでそれを行うことができます知っている:

df['newcol'] = df.id.str + " (" + df.ods.str + ")" 
print df[['newcol', 'provider']] 

しかし、私は新しい列を作成する中間ステップをスキップすることができれば私は疑問に思いました。

答えて

0

一つの可能​​な解決策は、新しいDataFrameSeriesから作成される - 1 concanecatedされた列idodsを、他方は列providerです:

print pd.DataFrame({'id (ods)': df.id.astype(str) + "(" + df.ods + ")", 
        'provider': df.provider}) 

      id (ods) provider 
0  nan (A86016)  emis 
1 463061.0 (L81042)  NaN 
2  nan (C84013)  tpp 
3 462941.0 (G82228)  emis 
4  nan (C81083)  tpp 
0

あなたは、このようにそれを行うにしてみてください可能性があります

df = df.assign(id_obs=df['id'].astype(str) + ' (' + df['ods'] + ')').drop(['id','ods'], axis=1) 

を10K DFのタイミング:

In [132]: %timeit pd.DataFrame({'id (ods)':df.id.astype(str) + " (" + df.ods + ")", 'provider': df.provider}) 
1 loop, best of 3: 734 ms per loop 

In [133]: %timeit df.assign(id_obs=df['id'].astype(str) + ' (' + df['ods'] + ')').drop(['id','ods'], axis=1) 
1 loop, best of 3: 758 ms per loop 
関連する問題