2017-07-11 179 views
1

有什么方法可以统计熊猫数据帧中每列的值变化次数吗?计算熊猫数据帧中每列值的变化

我不希望有自己的循环在每个塔,例如:

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] 

回答

2

如果值是数字,你可以采取相邻行之间的差异测试差异是否非零。那就来总结下来每列计算价值变动数量:

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

如果值不一定是数字,那么更通用的办法是 比较frame对自身shift -ed下降一排 - 这类似于您发布的代码,除了操作上的整个数据框,而不是列逐列进行:

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

的数字版本速度更快,移位后的版本更强劲。

+0

谢谢!后续工作:[计算忽略NaN的熊猫数据框中每个列中值的变化](https://stackoverflow.com/q/45038037/395857) –