当我在其他列上使用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')
。问题是此方法使用所述索引创建副本。因此,要么将这些设置为原始数据框df
和df2
,要么更好地在方法调用中添加inline=True
,以便不创建副本并在给定数据框中设置索引。
答案 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
赋值操作始终是索引对齐的。