Python:合并两个数据帧,跳过一些行 w.r.t。到列值
Python: Merge two dataframes skipping some rows w.r.t. to column value
得到数据帧 df1 和 df2 如下:
df1
Item Space
Grape 0.125
Mango 0.125
Mango 0.125
Beetroot 0.125
Beetroot 0.125
Beetroot 0.125
Carrot 0.125
Carrot 0.125
Carrot 0.125
Carrot 0.125
df2
Table_No Part Dedicated_Item
1 1 null
1 2 null
1 3 null
1 5 Potato
1 6 null
1 7 null
1 8 null
2 1 null
2 2 Onion
2 3 null
2 5 null
2 6 null
2 7 null
2 8 null
仅需要将 df1
和 df2
合并到 df2
的“Dedicated_Item
”列中具有“null
”值的行。
注意:不应更改 df1
和 df2
行顺序。照这样添加。如果 df2 保留了额外的行。
预期输出:
Table_No Part Dedicated_Item Item Space
1 1 null Grape 0.125
1 2 null Mango 0.125
1 3 null Mango 0.125
1 5 Potato
1 6 null Beetroot 0.125
1 7 null Beetroot 0.125
1 8 null Beetroot 0.125
2 1 null Carrot 0.125
2 2 Onion
2 3 null Carrot 0.125
2 5 null Carrot 0.125
2 6 null Carrot 0.125
2 7 null
2 8 null
提前致谢!
假设 null
是 NaN,您可以使用:
idx = df2[df2['Dedicated_Item'].isna()].index
df2.loc[idx, df1.columns] = df1.set_axis(idx[:len(df1)])
# or for a new dataframe:
# new = pd.concat([df2, df1.set_axis(idx[:len(df1)])], axis=1)
如果您有文字 null
字符串,请使用:
idx = df2[df2['Dedicated_Item'].eq('null')].index
输出:
Table_No Part Dedicated_Item Item Space
0 1 1 NaN Grape 0.125
1 1 2 NaN Mango 0.125
2 1 3 NaN Mango 0.125
3 1 5 Potato NaN NaN
4 1 6 NaN Beetroot 0.125
5 1 7 NaN Beetroot 0.125
6 1 8 NaN Beetroot 0.125
7 2 1 NaN Carrot 0.125
8 2 2 Onion NaN NaN
9 2 3 NaN Carrot 0.125
10 2 5 NaN Carrot 0.125
11 2 6 NaN Carrot 0.125
12 2 7 NaN NaN NaN
13 2 8 NaN NaN NaN
得到数据帧 df1 和 df2 如下:
df1
Item Space
Grape 0.125
Mango 0.125
Mango 0.125
Beetroot 0.125
Beetroot 0.125
Beetroot 0.125
Carrot 0.125
Carrot 0.125
Carrot 0.125
Carrot 0.125
df2
Table_No Part Dedicated_Item
1 1 null
1 2 null
1 3 null
1 5 Potato
1 6 null
1 7 null
1 8 null
2 1 null
2 2 Onion
2 3 null
2 5 null
2 6 null
2 7 null
2 8 null
仅需要将 df1
和 df2
合并到 df2
的“Dedicated_Item
”列中具有“null
”值的行。
注意:不应更改 df1
和 df2
行顺序。照这样添加。如果 df2 保留了额外的行。
预期输出:
Table_No Part Dedicated_Item Item Space
1 1 null Grape 0.125
1 2 null Mango 0.125
1 3 null Mango 0.125
1 5 Potato
1 6 null Beetroot 0.125
1 7 null Beetroot 0.125
1 8 null Beetroot 0.125
2 1 null Carrot 0.125
2 2 Onion
2 3 null Carrot 0.125
2 5 null Carrot 0.125
2 6 null Carrot 0.125
2 7 null
2 8 null
提前致谢!
假设 null
是 NaN,您可以使用:
idx = df2[df2['Dedicated_Item'].isna()].index
df2.loc[idx, df1.columns] = df1.set_axis(idx[:len(df1)])
# or for a new dataframe:
# new = pd.concat([df2, df1.set_axis(idx[:len(df1)])], axis=1)
如果您有文字 null
字符串,请使用:
idx = df2[df2['Dedicated_Item'].eq('null')].index
输出:
Table_No Part Dedicated_Item Item Space
0 1 1 NaN Grape 0.125
1 1 2 NaN Mango 0.125
2 1 3 NaN Mango 0.125
3 1 5 Potato NaN NaN
4 1 6 NaN Beetroot 0.125
5 1 7 NaN Beetroot 0.125
6 1 8 NaN Beetroot 0.125
7 2 1 NaN Carrot 0.125
8 2 2 Onion NaN NaN
9 2 3 NaN Carrot 0.125
10 2 5 NaN Carrot 0.125
11 2 6 NaN Carrot 0.125
12 2 7 NaN NaN NaN
13 2 8 NaN NaN NaN