将数据框添加到特定行和列的现有数据框
Adding a dataframe to an existing dataframe at specific rows and columns
我有一个循环,每次都会创建一个带有表单的数据框 (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)?
在这种情况下,合并是合并列的方法。使用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')
这就是最后解决问题的方法(在this answer的帮助下):
我使用了合并功能,但是合并创建了带有 _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)
我有一个循环,每次都会创建一个带有表单的数据框 (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)?
在这种情况下,合并是合并列的方法。使用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')
这就是最后解决问题的方法(在this answer的帮助下):
我使用了合并功能,但是合并创建了带有 _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)