Python-使用反向计数器追加行号

Python-使用反向计数器追加行号,python,pandas,loops,numpy,Python,Pandas,Loops,Numpy,我还有一个Python问题。这一点可能可以通过一个循环来实现,但是我正在寻找一个更精简的解决方案 假设我有这样一个数据帧: 我正在寻找一个代码来生成列ID,该列ID只不过是一个降序计数器,当列中的销售值发生变化时,即对于每个销售人员,我希望ID列检索销售值发生变化之前的剩余天数。 例如,在2018年1月1日,销售员Joe的ID为2,因为信号在2天内发生变化 有没有办法解决这个问题 非常感谢。 J设置: 计算: 结果: 说明: 创建一个'changes'列,该列在每个销售人员的'salled'字

我还有一个Python问题。这一点可能可以通过一个循环来实现,但是我正在寻找一个更精简的解决方案

假设我有这样一个数据帧:

我正在寻找一个代码来生成列ID,该列ID只不过是一个降序计数器,当列中的销售值发生变化时,即对于每个销售人员,我希望ID列检索销售值发生变化之前的剩余天数。 例如,在2018年1月1日,销售员Joe的ID为2,因为信号在2天内发生变化

有没有办法解决这个问题

非常感谢。 J

设置: 计算: 结果: 说明:
创建一个
'changes'
列,该列在每个销售人员的
'salled
'字段每次更改时递增。然后,对于每个增量组(仍按销售人员分组),获取该组的长度(等于该值的后续行的长度),并从该值中减去按日期排序的每行索引。该减法的结果将是一个从组长度下降到1的序列。重置索引并合并回原始数据帧。这是一个有点令人困惑的解决方案,但它应该可以工作。

请不要将数据作为图像发布。你的每一天在每个销售人员中都是连续的吗?谢谢。并没有真正达到同样的结果。除了熊猫,你还使用了哪些其他库?你能更深入地了解出了什么问题吗?错误是什么?我正在使用pandas.22、numpy1.14.12和python2.7。这些都是相当标准的软件包,虽然有点过时。是的,确实没有什么不寻常的,我也使用它们。错误发生在计算的第二行。错误很长:ValueError Traceback(最后一次调用);ValueError:传递的项数错误0,placement意味着1我很难在没有看到任何内容的情况下进行调试,但听起来python试图将0项分配给1占位符。i、 e.
df['id']
未从等号的RHS接收值。尝试该行,但不要将值赋给
df['id']
。你从中得到的应该能帮助你解决你的问题。还可以尝试重新启动python等等,因为我的环境没有抛出错误。并确保您正在使用我的设置(为了一致性)。
df = pd.DataFrame([
    pd.Series(pd.date_range('1/1/2018', '1/7/2018').append(pd.date_range('1/1/2018', '1/7/2018'))),
    pd.Series(['Joe']*7 + ['Helen']*7),
    pd.Series([1,1,0,0,0,0,1,0,1,1,0,1,0,0]),
]).T
df.columns = ['date', 'salesman', 'sold']
df['date'] = pd.to_datetime(df['date'])
df['changes'] = df.groupby('salesman')['sold'].expanding().apply(lambda x: (np.diff(x) != 0).sum()).reset_index(drop = True)

df['id'] = df.groupby(['salesman', 'changes']).apply(lambda grp: pd.Series(len(grp) - grp.sort_values('date').reset_index().index)).reset_index(drop = True)

df.drop('changes', axis = 1, inplace = True)
>>> df


    date    salesman  sold  id
0   2018-01-01  Joe     1   2
1   2018-01-02  Joe     1   1
2   2018-01-03  Joe     0   4
3   2018-01-04  Joe     0   3
4   2018-01-05  Joe     0   2
5   2018-01-06  Joe     0   1
6   2018-01-07  Joe     1   1
7   2018-01-01  Helen   0   1
8   2018-01-02  Helen   1   2
9   2018-01-03  Helen   1   1
10  2018-01-04  Helen   0   1
11  2018-01-05  Helen   1   1
12  2018-01-06  Helen   0   2
13  2018-01-07  Helen   0   1