我想合并两个 pandas 数据框。
df1 =
A B
2 11
2 13
2 15
2 19
2 25
2 35
2 41
2 47
2 46
2 51
3 9
3 15
3 17
3 23
3 25
3 29
5 4
5 23
5 28
与另一个数据框。
df2 =
A B C
2 11 abc
2 13 cdd
2 35 cdd
2 41 cdd
2 47 cdd
3 9 cdd
3 15 cdd
3 17 cdd
3 23 cdd
两个数据帧都按“A”排序,然后按“B”排序。我想按 columns['A', 'B'] 合并;因此,对于缺少数据的“C”列,我想用 na 来填充它们,但是用 na_uniqueNumber 来填充 na 的每个缺失 block 。
如何更新此合并方法:
data_frames = [df1, df2]
df_update = reduce(lambda left,right: pd.merge(
left, right, on=['A', 'B'], how='outer'), data_frames).fillna('na')
注意:在存在其他列的情况下,代码应仅在“C”中使用唯一值更新na。
预期输出:
df2 =
A B C
2 11 abc
2 13 cdd
2 15 na_01
2 19 na_01
2 25 na_01
2 35 cdd
2 41 cdd
2 47 cdd
2 46 na_02
2 51 na_02
3 9 cdd
3 15 cdd
3 17 cdd
3 23 cdd
3 25 na_03
3 29 na_03
5 4 na_04
5 23 na_04
5 28 na_04
谢谢,
请您参考如下方法:
国际联合会
New = df_update[df_update.C == 'na']
s=New.reset_index().groupby('A').apply(lambda x : x['index'].diff().ne(1)).cumsum()
df_update.loc[df_update.C == 'na','C']+='_'+s.astype(str).str.pad(2,fillchar='0').values
df_update
Out[124]:
A B C
0 2 11 abc
1 2 13 cdd
2 2 15 na_01
3 2 19 na_01
4 2 25 na_01
5 2 35 cdd
6 2 41 cdd
7 2 47 cdd
8 2 46 na_02
9 2 51 na_02
10 3 9 cdd
11 3 15 cdd
12 3 17 cdd
13 3 23 cdd
14 3 25 na_03
15 3 29 na_03
16 5 4 na_04
17 5 23 na_04
18 5 28 na_04
