Skip to main content
 首页 » 编程设计

python之计算 Pandas 数据框中每列值的变化

2025年05月04日15zhengyun_ustc

有什么巧妙的方法可以计算 pandas 数据框中每一列值的变化次数吗?

我不想让自己遍历每一列,例如:

import pandas as pd 
 
frame = pd.DataFrame({ 
    'time':[1234567000,1234567005,1234567009], 
    'X1':[96.32,96.01,96.05], 
    'X2':[23.88,23.96,23.96] 
},columns=['time','X1','X2'])  
 
print(frame) 
 
changes = [] 
for column_name in frame.columns.values: 
    print('column_name: {0}'.format(column_name)) 
    changes.append(sum(frame[column_name]!=frame[column_name].shift(1))) 
 
print('changes: {0}'.format(changes)) 

返回:

         time     X1     X2 
0  1234567000  96.32  23.88 
1  1234567005  96.01  23.96 
2  1234567009  96.05  23.96 
column_name: time 
column_name: X1 
column_name: X2 
changes: [3, 3, 2] 

请您参考如下方法:

如果值是数字,您可以获取相邻行之间的差异并测试差异是否非零。然后对每一列进行求和,计算值变化的次数:

In [48]: (frame.diff(axis=0) != 0).sum(axis=0) 
Out[48]:  
time    3 
X1      3 
X2      2 
dtype: int64 

如果值不一定是数字,那么更通用的方法是 将 frame 与自身进行比较 shift - 向下移动一行 - 这类似于您发布的代码,除了操作是在整个 DataFrame 而不是列上完成的 -按栏目:

In [50]: (frame != frame.shift(axis=0)).sum(axis=0) 
Out[50]:  
time    3 
X1      3 
X2      2 
dtype: int64 

数字版本更快,移位版本更健壮。