Pandas在添加新列时是否比较索引?

时间:2018-03-08 20:54:14

标签: python pandas dataframe

当我在其他列上使用apply添加列时,panda是否将此新列的结果存储在与用于计算的行相同的行中。如果没有,我该怎么做呢。

我不完全自信的原因是遵循示例

df = pd.DataFrame({'index':[0,1,2,3,4], 'value':[1,2,3,4,5]})
df2 = pd.DataFrame({'index':[0,2,1,3,5], 'value':[1,2,3,4,5]})
df['second_value'] = df['value'].apply(lambda x: x**2)
df['third_value'] = df2['value'].apply(lambda x: x**2)
df

结果是

index value  second_value  third_value
0     1      1             1    
1     2      4             4    
2     3      9             9    
3     4      16            16
4     5      25            25

所以我在这里看到的是大熊猫只检查订单。因此,可能会发生DataFrame在随机时刻排序,这可能会搞乱,或者我可以假设在执行时始终保留订单

df['new_value'] = df['old_value'].apply(...)

编辑:在我的原始代码片段中,我忘记设置索引,这实际上是我做错的地方。在使用apply之前,我有df.set_index('index')df2.set_index('index')。问题是此方法使用所述索引创建副本。因此,要么将这些设置为原始数据框dfdf2,要么更好地在方法调用中添加inline=True,以便不创建副本并在给定数据框中设置索引。

1 个答案:

答案 0 :(得分:1)

这不是你如何定义索引。调用index构造函数时,需要将list / iterable传递给pd.DataFrame关键字参数。

df = pd.DataFrame({'value' : [1, 2, 3, 4, 5]})
df2 = pd.DataFrame({'value' : [1, 2, 3, 4, 5]}, index=[0, 2, 1, 3, 4])

df['second'] = df['value'] ** 2
df['third'] = df2['value'] ** 2

df
   value  second  third
0      1       1      1
1      2       4      9    # note these 
2      3       9      4    # two rows
3      4      16     16
4      5      25     25

赋值操作始终是索引对齐的。