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