【发布时间】:2018-01-30 10:42:13
【问题描述】:
我有一个带有时间序列格式的数据框
A B C 201401 201402 201403
a1 b1 c1 100 200 300
a2 b2 c2 0 250 0
我已使用Pandas.melt 将这些数据展平,并得到以下格式。
A B C YYYYMM Value
a1 b1 c1 201401 100
a1 b1 c1 201402 200
a1 b1 c1 201403 300
a2 b2 c2 201401 0
a2 b2 c2 201402 250
a2 b2 c2 201403 0
现在对于 [A B C] 的特定组合,我只想要时间序列从非零值开始。所以我的输出应该是这样的。
A B C YYYYMM Value
a1 b1 c1 201401 100
a1 b1 c1 201402 200
a1 b1 c1 201403 300
a2 b2 c2 201402 250
a2 b2 c2 201403 0
我试过了,
df.groupby(['A','B','C']).apply(lambda x: x['Value'][np.where(x['Value']>0)[0][0]:]
这只是给了我时间序列,并不意味着就地更改。 我应该怎么做才能做到这一点?
【问题讨论】:
-
为什么不直接过滤数据框
df = df[df['Value'] > 0]? -
df.melt(id_vars=['A', 'B', 'C']).query('value > 0')? -
Hi 这将消除时间序列中的所有零值。我只想消除前导零。我已更改示例以供参考。
-
我在你的例子中没有看到前导零,数字中的前导零应该像这样 0100
-
如果您将 A、B、C 视为一个组,并且根据我的 250 具有值为 0,250,0 的时间序列,则 0 是领先的零消除时间序列。
标签: python-2.7 pandas dataframe