我正在编写一个应用程序,需要从另一个数据框中提取单个列。我有一些奇怪的行为。当我使用一个数据集运行该函数时,一切工作正常。当它在辅助数据集上执行时,相同的代码会根据索引对数据进行重新排序。我正在竭尽全力试图弄清楚为什么相同的代码会产生两个不同的结果。
这是代码。我意识到这不是MCVE,但我已经证实这正是诉诸手段的所在。我希望人们能大致了解 为什么熊猫在各种情况下都会求助于或不求助。
def new_curr_need(self, need):
self.main_df.drop('Curr_need', axis=1, inplace=True)
self.main_df = (
self.main_df.join(self.need_df[need],
how='left'))
#if it resorts, happens after the join
self.main_df.rename({need:'Curr_need'},
axis='columns', inplace=True)
有关数据集的潜在相关信息:
main_df和need_df索引是一个字符串(客户名称),并且在两个数据集中基本相同
这两个数据集之间的唯一主要区别在于,诉诸于此的数据集要宽得多
在我的代码的其他地方,用户可以以自定义方式对数据进行排序。使用数据集1而不是数据集2运行上述函数后,排序将保持不变。
答案 0 :(得分:0)
Pandas的左联接操作对右数据框的索引重新排序,使其与左数据框的索引匹配。
例如,以下代码生成一个数据帧,其中b的索引被重新排列以匹配a的索引:
a = pd.DataFrame({'x':[1,2,3]})
b = pd.DataFrame({'y':[1,2,3]})
a.index = [2,0,1]
a.join(b, how='left')
x y
2 1 3
0 2 1
1 3 2
如果您加入的数据框的索引相同,则值将保持相同的顺序;如果使用右数据框的索引,则将使用值。