删除数据框

时间:2017-08-22 08:30:54

标签: python-2.7 pandas dataframe

我有以下格式的数据框,带有时间序列

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]:]

这只是给了我时间序列,并不意味着改变。 我该怎么做才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

我继续你的分组然后过滤的想法。基本思想是采用每个组并找到第一个非零值索引,假设它们已经按日期排序。然后只是取消组合并清理。

def applyFunc(row):
    row_values = np.array(row.Value)
    first_non_zero_index = next((i for i, x in enumerate(row_values) if x), None)
    return row.iloc[first_non_zero_index:]

df.groupby(['A','B','C']).apply(applyFunc).drop(["A","B","C"],axis=1).reset_index().drop("level_3",axis=1)

使用https://stackoverflow.com/a/19502403/2750819

中的代码段