用另一个df中的行替换Pandas df中的行

时间:2016-09-01 09:11:46

标签: python pandas dataframe

我有2个Pandas dfs,A和B.两个都有10列和索引' ID'。在A和B的ID匹配的情况下,我想用A行替换B行。我试图使用pd.update,但还没有成功。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

下面的代码应该做的伎俩

s1 = pd.Series([5, 1, 'a'])
s2 = pd.Series([6, 2, 'b'])
s3 = pd.Series([7, 3, 'd'])
s4 = pd.Series([8, 4, 'e'])
s5 = pd.Series([9, 5, 'f'])



df1 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)],  columns =  ["A", "B", "C"])

s1 = pd.Series([5, 6, 'p'])
s2 = pd.Series([6, 7, 'q'])
s3 = pd.Series([7, 8, 'r'])
s4 = pd.Series([8, 9, 's'])
s5 = pd.Series([9, 10, 't'])

df2 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)],  columns =  ["A", "B", "C"])

df1.loc[df1.A.isin(df2.A), ['B', 'C']] = df2[['B', 'C']]
print df1

输出

   A   B  C
0  5   6  p
1  6   7  q
2  7   8  r
3  8   9  s
4  9  10  t

答案 1 :(得分:0)

您可以在 A 中清空目标单元格(通过将其设置为NaN),然后使用combine_first()方法用 B 的值填充目标单元格。尽管这听起来可能违反直觉,但这种方法使您可以灵活地在两行代码中同时定位目标行和特定列。希望有帮助。

替换索引匹配的完整行的示例:

# set-up
cols = ['c1','c2','c3']
A = pd.DataFrame(np.arange(9).reshape((3,3)), columns=cols)
B = pd.DataFrame(np.arange(10,16).reshape((2,3)), columns=cols)

#solution
A.loc[B.index] = np.nan
A = A.combine_first(B)

仅将某些目标列替换为索引匹配的行的示例:

A.loc[B.index, ['c2','c3']] = np.nan
A = A.combine_first(B)