df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=list('ABCD'))
# A B C D
# 0 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
df.diff(axis=1) # subtracting column wise
# A B C D
# 0 NaN 1 1 1
# 1 NaN 1 1 1
# 2 NaN 1 1 1
df.diff() # subtracting row wise
# A B C D
# 0 NaN NaN NaN NaN
# 1 4 4 4 4
# 2 4 4 4 4
# Create a large dataframe.
df = pd.DataFrame(np.random.randn(1e6, 100))
%%timeit
np.diff(df.values, axis=1)
1 loops, best of 3: 450 ms per loop
%%timeit
df - df.shift(axis=1)
1 loops, best of 3: 727 ms per loop
%%timeit
df.T.diff().T
1 loops, best of 3: 1.52 s per loop
使用^{} 中的
axis
参数:Pandas数据帧非常适合处理其列具有不同数据类型的表型数据。
如果跨列和跨行减去都有意义,则意味着所有值的数量都相同。可能表示您应该使用NumPy数组而不是Pandas数据帧。
在任何情况下,都可以使用
arr = df.values
从数据帧中提取底层数据的NumPy数组。如果所有列共享相同的数据类型,则NumPy数组将具有相同的数据类型。(当列具有不同的数据类型时,df.values
具有object
数据类型)。然后可以使用^{} 计算行或列之间的差异:
只需区分列,例如
对于多个列,我认为unutbu的答案是最好的(尽管它返回的是np.ndarray对象而不是dataframe,但即使在将其转换为dataframe之后,它仍然更快)。
相关问题 更多 >
编程相关推荐