是否有任何巧妙的方法来计算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
如果值不一定是数字,那么更通用的方法是
比较框架与自身向下移动一行 – 这类似于您发布的代码,除了操作是在整个DataFrame而不是逐列完成的:
In [50]: (frame != frame.shift(axis=0)).sum(axis=0)
Out[50]:
time 3
X1 3
X2 2
dtype: int64
数字版本更快,移位版本更强大.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。