Python 按索引重新分配数据帧值
我有rand_df1:Python 按索引重新分配数据帧值,python,pandas,dataframe,Python,Pandas,Dataframe,我有rand_df1: np.random.seed(1) rand_df1 = pd.DataFrame(np.random.randint(0, 40, size=(3, 2)), columns=list('AB')) print(rand_df1, '\n') 另外,rand_df2: rand_df2 = pd.DataFrame(np.random.randint(0, 40, size=(3, 2)), columns=list('AB')) rand_df2 = rand_df
np.random.seed(1)
rand_df1 = pd.DataFrame(np.random.randint(0, 40, size=(3, 2)), columns=list('AB'))
print(rand_df1, '\n')
另外,rand_df2:
rand_df2 = pd.DataFrame(np.random.randint(0, 40, size=(3, 2)), columns=list('AB'))
rand_df2 = rand_df2.loc[rand_df2.index.repeat(rand_df2['B'])]
print(rand_df2, '\n')
我需要按索引将第一个数据帧列'A'
中的值与第二个数据帧的'A'
中的值重新分配。rand_df1的所需输出
:
A B
0 37 12
1 16 1
2 12 7
2 12 7
2 12 7
2 12 7
2 12 7
2 12 7
2 12 7
如果我正确地解释了您的问题,您希望在
rand_df2
上追加新行。这些行将从rand_df1
中选择,它们的索引未出现在rand_df2
中。对吗
这将实现以下目的:
rand_df2_new = rand_df2.append(rand_df1[~rand_df1.index.isin(rand_df2.index)]).sort_index()
感谢Henry Yik的解决方案:
rand_df2.combine_first(rand_df1)
另外,在一个数据帧中用额外的列测试了这一点,在第二个数据帧和向后的情况下,这不会出现。它工作得很好。
rand\u df2。先合并(rand\u df1)
。感谢您的解决方案。使用rand_df1
中的附加列对其进行了测试,该列未出现在rand_df2
中。用NaN填充额外col3的值。
rand_df2_new = rand_df2.append(rand_df1[~rand_df1.index.isin(rand_df2.index)]).sort_index()
rand_df2.combine_first(rand_df1)
A B
0 37 12
1 16 1
2 12 7
2 12 7
2 12 7
2 12 7
2 12 7
2 12 7
2 12 7