打印组合字符串列而不在pandas中创建新列?

时间:2016-05-11 10:25:21

标签: python pandas

我使用pandas 0.18。我有一个如下所示的数据框:

>> 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

我想输出一个格式如下的表:

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

有没有一种简单的方法可以在不创建新列的情况下使用pandas执行此操作?我知道我可以这样做:

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

但我只是想知道我是否可以跳过创建新列的中间步骤。

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是从DataFrame创建新的Series - 其中一个是标记列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

答案 1 :(得分: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