2017-07-11 131 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) –