我有一个循环,每次创建一个带有表单的dataframe(DF)
DF
ID LCAR RCAR ... LPCA1 LPCA2 RPCA2
0 d0129 312.255859 397.216797 ... 1.098888 1.101905 1.152332然后使用以下形式将该数据帧添加到现有的数据帧(Main_exl_df)中:
main_exl_df
ID Date ... COGOTH3 COGOTH3X COGOTH3F
0 d0129 NaN ... NaN NaN NaN
1 d0757 NaN ... 0.0 NaN NaN
2 d2430 NaN ... NaN NaN NaN
3 d3132 NaN ... 0.0 NaN NaN
4 d0371 NaN ... 0.0 NaN NaN
... ... ... ... ... ... ...
2163 d0620 NaN ... 0.0 NaN NaN
2164 d2410 NaN ... 0.0 NaN NaN
2165 d0752 NaN ... NaN NaN NaN
2166 d0407 NaN ... 0.0 NaN NaN在每次迭代中,main_exl_df都会被保存,然后为下一次迭代再次加载。
我试过了
main_exl_df = pd.concat([main_exl_df, DF], axis=1)但是这样每次都会将列添加到main_exl_df的右侧,并且不能识别'ID‘行的索引。
如何指定在具有正确ID和右列的行处添加新的数据帧(DF)?
发布于 2020-08-21 03:58:59
Merge是在这种情况下组合列的一种方法。使用pd.merge时,需要指定合并是内部合并、左侧合并还是右侧合并。假设在这种情况下,您希望将所有行保留在main_exl_df中,则应使用以下命令进行合并:
main_exl_df = main_exl_df.merge(DF, how='left', on='ID')如果您希望保留两个数据帧中的行,请使用outer作为参数值:
main_exl_df = main_exl_df.merge(DF, how='outer', on='ID')发布于 2020-08-25 03:40:39
这就是最终解决问题的方法(在this answer的帮助下):
我使用了merge函数,但是merge创建了带有_x和_y后缀的重复列。为了去掉_x后缀,我使用了这个函数:
def drop_x(df):
# list comprehension of the cols that end with '_x'
to_drop = [x for x in df if x.endswith('_x')]
df.drop(to_drop, axis=1, inplace=True)然后合并两个数据帧,同时用空字符串替换_y后缀:
col_to_use = DF.columns.drop_duplicates(main_exl_df)
main_exl_df = main_exl_df.merge(DF[col_to_use], on='ID', how='outer', suffixes=('_x', ''))
drop_x(main_exl_df)https://stackoverflow.com/questions/63508159
复制相似问题