Python 关于DataFrame.apply()的混淆
假设我编写代码:Python 关于DataFrame.apply()的混淆,python,pandas,dataframe,Python,Pandas,Dataframe,假设我编写代码: df2 = pd.DataFrame(np.random.randint(1,5,4).reshape((2,2)), columns=['A', 'B']) print("dataframe: \n", df2) print("mean: \n", df2.mean(0)) df2 = df2.apply(lambda x: x - [1, 2], axis=0) print("altered df2: \n", df2) 它给了我结果: dataframe: A
df2 = pd.DataFrame(np.random.randint(1,5,4).reshape((2,2)), columns=['A', 'B'])
print("dataframe: \n", df2)
print("mean: \n", df2.mean(0))
df2 = df2.apply(lambda x: x - [1, 2], axis=0)
print("altered df2: \n", df2)
它给了我结果:
dataframe:
A B
0 1 1
1 2 2
mean:
A 1.5
B 1.5
dtype: float64
altered df2:
A B
0 0 0
1 0 0
首先,我要求它给出沿轴=0
的平均值。在我看来,这意味着将每一行计算为一个向量,然后求出这些向量的平均值。在这一点上,熊猫似乎同意我的观点
但是,我随后使用了DataFrame.apply()
函数,并再次指定axis=0
。在这里,我希望使用相同的逻辑,即对每一行执行一个操作。在这种情况下,lambda x:x-[1,2]
。我预期的结果是:
A B
0 0 -1
1 1 0
但是,当我指定axis=0(行)时,它实际上对列执行操作
我很难理解pandas,尤其是它如何索引行和列,这进一步增加了混乱。就目前情况而言,每次我想我明白了事情的运作方式,我就会发现我错了,所以我的脑子里从来没有什么东西我想找一个简单的方法来思考这些东西,这样它就会粘在我有阅读障碍的小脑袋里。
axis=0
在每列中应用一个函数,axis=0
在每列中取平均值column@ansev,谢谢,是的,我在我的问题中提到了这一点。我想知道的是,为什么在其他上下文中axis=0专门指行。例如,应用df.mean(0)返回一行。我确实看到行中的每个元素都是列的平均值。所以也许我应该改变我的想法:0等于列,1等于行。axis=0
在每列中应用一个函数,axis=0
在每列中获得平均值column@ansev,谢谢,是的,我在我的问题中提到了这一点。我想知道的是,为什么在其他上下文中axis=0专门指行。例如,应用df.mean(0)返回一行。我确实看到行中的每个元素都是列的平均值。所以也许我应该改变我的想法:0等于列,1等于行。