按索引重新分配熊猫数据框值

时间:2020-09-01 12:28:04

标签: 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')
    A   B
0  37  12
1   8   9
2  11   5 

另外,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  B
1  16  1
2  12  7
2  12  7
2  12  7
2  12  7
2  12  7
2  12  7
2  12  7

我需要按索引将第二个数据帧的'A'中的值重新分配给第一个数据帧col '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

2 个答案:

答案 0 :(得分:1)

如果我正确解释了您的问题,那么您正在寻找在rand_df2上附加新行的方法。这些行将从rand_df1中选择,这些行的索引未出现在rand_df2中。正确吗?

这可以解决问题:

rand_df2_new = rand_df2.append(rand_df1[~rand_df1.index.isin(rand_df2.index)]).sort_index()

答案 1 :(得分:0)

感谢Yik Yi的解决方案:

sheet.cell(column='Action', row=sheet.max_row+1, value=action)
rand_df2.combine_first(rand_df1)

此外,在一个数据帧中用额外的列对此进行了测试,这在第二个数据帧和向后的情况下不会出现。效果很好。