使用字典内的数据在pandas DataFrame上添加列

时间:2017-05-29 15:46:37

标签: python pandas dictionary dataframe append

我有像这样的pandas Dataframe p_df

        date_loc        timestamp  
id                                                                    
1       2017-05-29  1496083649   
2       2017-05-29  1496089320   
3       2017-05-29  1496095148   
4       2017-05-30  1496100936   
...

和像这样的词典

observations = {
   '1496089320': {
       'col_a: 'value_a',
       'col_b: 'value_b',
       'col_c: 'n/a'
   },
   '1496100936' : {
       'col_b: 'value_b'
   },
   ...
}

我希望将observations子字典中包含的所有值与其各自的键作为列名添加,当dict中的键也存在于timestamp列中时,以便得到的数据帧是

        date_loc     timestamp     col_a    col_b   col_c
id                                                                    
1       2017-05-29  1496083649   
2       2017-05-29  1496089320   value_a  value_b     n/a
3       2017-05-29  1496095148   
4       2017-05-30  1496100936            value_b
...

我尝试了几种方法(agg()apply()iterrows())但是没有任何方法可行。这是我最后一次尝试的例子

p_df['col_a'] = ''
p_df['col_b'] = ''
p_df['col_c'] = ''

for index, row in p_df.iterrows():
    ts  = p_df.loc[index, 'timestamp']
    if ts in observations:
        # how to concat column values in this row?
    # end if
#end for

可能我觉得这也是比迭代数据帧行更好的方法,因此我可以选择比这更好的替代方案。

1 个答案:

答案 0 :(得分:1)

您可以从字典构建数据框,然后与timestamp列上的原始数据框合并:

import pandas as pd
# make sure the timestamp columns are of the same type
df.timestamp = df.timestamp.astype(str)
​
df.merge(pd.DataFrame.from_dict(observations, 'index'), 
         left_on='timestamp', right_index=True, how='left').fillna('')

#     date_loc   timestamp   col_b  col_c   col_a
#id                 
#1  2017-05-29  1496083649          
#2  2017-05-29  1496089320  value_b n/a value_a
#3  2017-05-29  1496095148          
#4  2017-05-30  1496100936  value_b