我有像这样的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
可能我觉得这也是比迭代数据帧行更好的方法,因此我可以选择比这更好的替代方案。
答案 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