# 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
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
3条答案
按热度按时间rwqw0loc1#
Pandas DataFrames非常适合操作列具有不同数据类型的表类数据。
如果列和行之间的减法都有意义,那么这意味着所有的值都是相同的数量。这可能表明你应该使用NumPy数组而不是Pandas DataFrame。
在任何情况下,您都可以使用
arr = df.values
从DataFrame中提取底层数据的NumPy数组。如果所有列共享相同的dtype,则NumPy数组将具有相同的dtype。(当列具有不同的dtype时,df.values
具有object
dtype)。然后,您可以使用
np.diff(arr, axis=...)
计算沿着行或列的差异:字符串
u4dcyp6a2#
只是不同的列,例如。
字符串
对于多列,我相信unutbu的答案是最好的(尽管它返回一个np.ndarray对象而不是一个嵌套框架,但即使在将其转换为嵌套框架之后,它仍然更快)。
型
kgsdhlau3#
在
diff
中使用axis
参数:字符串