在另一列的基础上递增计数列1

斯特林兹

我有这个数据框,需要在我的距离列上创建一个计数列。我按模型列将结果分组。我期望得到的是,每当距离为100时,下一个计数行上的增量就为1。例如,这是我到目前为止所获得的结果,但是增量没有成功

import pandas as pd
df = pd.DataFrame(
    [['A', '34', 3], ['A', '55', 5], ['A', '100', 7], ['A', '0', 1],['A', '55', 5],
     ['B', '90', 3], ['B', '0', 1], ['B', '1', 3], ['B', '21', 1],['B', '0', 1],
     ['C', '9', 7], ['C', '100', 4], ['C', '50', 1], ['C', '100', 6],['C', '22', 4]],
    columns=['Model', 'Distance', 'v1'])

df = df.groupby(['Model']).apply(lambda row: callback(row) if row['Distance'] is not None else callback(row)+1)
print(df)
import numpy as np
(
    df.groupby('Model')
    .apply(lambda x: x.assign(Bount=x.Count  + x.Distance.shift()
                              .eq('100').replace(False, np.nan)
                              .ffill().fillna(0)
                             )
          )
    .reset_index(level=0, drop=True)
)

Result with your code solution

Model   Distance    v1  Count
A           34      3   1.0
A           55      5   2.0
A           100     7   3.0
A           0       1   5.0
A           55      5   6.0
B           90      3   1.0
B           0       1   2.0
B           1       3   3.0
B           21      1   4.0
B           0       1   5.0
C           9       7   1.0
C           100     4   2.0
C           50      1   4.0
C           100     6   5.0
C           22      4   6.0


My expected result is:


Model   Distance    v1  Count
A           34      3   1.0
A           55      5   2.0
A           100     7   3.0
A           0       1   5.0
A           55      5   6.0
B           90      3   1.0
B           0       1   2.0
B           1       3   3.0
B           21      1   4.0
B           0       1   5.0
C           9       7   1.0
C           100     4   2.0
C           50      1   4.0
C           100     6   5.0
C           22      4   7.0

看一下两个距离等于100的C组

艾伦

设定:

df = pd.DataFrame({'Model': {0: 'A', 1: 'A', 2: 'A', 3: 'A', 4: 'A', 5: 'B', 6: 'B', 7: 'B', 8: 'B', 9: 'B', 10: 'C', 11: 'C', 12: 'C', 13: 'C', 14: 'C'}, 
                   'Distance': {0: '34', 1: '55', 2: '100', 3: '0', 4: '55', 5: '90', 6: '0', 7: '1', 8: '21', 9: '0', 10: '9', 11: '23', 12: '100', 13: '33', 14: '23'}, 
                   'v1': {0: 3, 1: 5, 2: 7, 3: 1, 4: 5, 5: 3, 6: 1, 7: 3, 8: 1, 9: 1, 10: 7, 11: 4, 12: 1, 13: 6, 14: 4}, 
                   'Count': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 1, 6: 2, 7: 3, 8: 4, 9: 5, 10: 1, 11: 2, 12: 3, 13: 4, 14: 5}})

如果需要在“模型”列上应用逻辑,则可以使用平移,比较并为eligibal行加1:

df.loc[df.Distance.shift().eq('100'), 'Count'] += 1

如果逻辑需要在每个模型组中应用,则可以使用groupby:

(
    df.groupby('Model')
    .apply(lambda x: x.assign(Count=x.Distance.shift().eq('100') + x.Count))
    .reset_index(level=0, drop=True)
)

根据@StringZ的更新,以下是更新的解决方案:

(
    df.groupby('Model')
    .apply(lambda x: x.assign(Count=x.Count + x.Distance.shift()
                              .eq('100').replace(False, np.nan)
                              .ffill().fillna(0)
                             )
          )
    .reset_index(level=0, drop=True)
)

Model   Distance    v1  Count
0   A   34          3   1.0
1   A   55          5   2.0
2   A   100         7   3.0
3   A   0           1   5.0
4   A   55          5   6.0
5   B   90          3   1.0
6   B   0           1   2.0
7   B   1           v3  3.0
8   B   21          1   4.0
9   B   0           1   5.0
10  C   9           7   1.0
11  C   23          4   2.0
12  C   100         1   3.0
13  C   33          6   5.0
14  C   23          4   6.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在另一列的基础上对行求和

如何在列的基础上写另一列的位置?

在大熊猫另一列的基础上创建新列

我想在熊猫中的另一列数据的基础上添加新列

AWK脚本根据条件在另一列的基础上提供某些列的总和

在R是/否的基础上基于另一列创建新列

无法在另一列基础上替换现有列

在一列的基础上做列

如何在另一列的基础上填充NA第一列中的NA值

熊猫在另一列的基础上添加新列(错误传递的项目数19,放置位置表示1)

如何在不迭代pandas datframe中的列的基础上对另一列的条件求和

在R中另一数据框中的另一列的基础上在一个数据框中创建一列

一个数据帧索引的值的从另一列的基础上操纵

在一列的基础上组合具有不同列数的多个表

在另一个列熊猫的基础上更改列的值

在第1列的基础上,逐列合并多行-同一文件?

使用定界符比较第二列的基础上比较2个文件的第一列;

这将是一个更清洁的方式,以集群的ArrayList()的基础上一列数据?

SQL添加计数列基于同一表并按另一列分组

如何添加在同一表的另一列上递增的列?

数据帧计数一组条件在每行的基础上由几列传递

如何在另一个变量的基础上注册一个变量?

8 Java的基础上,用另一名录指数流

如何在另一个数字的基础上给数字加上零?

在另一个CheckBox的基础上取消选中所有CheckBox

在另一列中使用自动递增的 ID

MySql-根据另一列递增

查询以基于另一列中的值递增值

在现有列的基础上创建一个新列,但在上方行