【发布时间】:2018-05-31 11:04:27
【问题描述】:
This post 和 this post 让我很接近,但我无法解决我的问题。
我有一个看起来像这样的 df:
2017-04-03 2017-04-04 2017-04-05 2017-04-06
id
0 0.0 active 0.0 0.0
1 0.0 active 0.0 active
2 0.0 0.0 0.0 0.0
我想计算每一行的零并将它们放入一个字符串中以对数据进行编码,但只要没有连续的零,计数就需要重置。
对于上述 df,输出 df 如下所示:
2017-04-03 2017-04-04 2017-04-05 2017-04-06
id
0 inactive_1 active inactive_1 inactive_2
1 inactive_1 active inactive_1 active
2 inactive_1 inactive_2 inactive_3 inactive_4
这个函数让我非常接近,但不考虑重置 cumsum,它只是对行中所有为零的实例求和。
def inactive(s):
np.where(s == 0, 'inactive_' + (s.eq(0).cumsum()).astype(str), s)
df.apply(inactive, 1)
【问题讨论】:
-
真实数据中的索引数和列数是多少?
-
~100,000 行乘~300 列。 @coldspeed 下面的解决方案效果很好
-
@Matt 欢呼。您可以对所有答案进行投票,即使您只能接受一个。
-
我比较解决方案并与我的样本数据和
100000, 300行、列 -cᴏʟᴅsᴘᴇᴇᴅ解决方案是3.5比me慢 ;),检查 timings