【问题标题】:How do I classify a dataframe in a specific case?如何在特定情况下对数据框进行分类?
【发布时间】:2022-01-13 05:23:14
【问题描述】:

我有一个pandas.DataFrame 的表格。我将向您展示一个简单的示例。(实际上,它由数亿行数据组成。)。 我想在“2”列中的字母发生变化时更改数字。其余列 (columns:1,3 ~) 中的数字不应更改。

df=

  index    1            2         3
    

    0      0           a100       1
    1      1.04        a100       2
    2      32          a100       3
    3      5.05        a105       4
    4      1.01        a105       5
    5      155         a105       6
    6      3155.26     a105       7
    7      354.12      a100       8
    8      5680.13     a100       9
    9      125.55      a100       10
    10     13.32       a100       11
    11     5656.33     a156       12
    12     456.61      a156       13
    13     23.52       a1235      14
    14     35.35       a1235      15
    15     350.20      a100       16
    16     30.         a100       17
    17     13.50       a100       18
    18     323.13      a231       19
    19     15.11       a1111      20
    20     11.22       a1111      21

这是我的预期结果:

df=

  index    1           2       3
    

    0      0           0       1
    1      1.04        0       2
    2      32          0       3
    3      5.05        1       4
    4      1.01        1       5
    5      155         1       6
    6      3155.26     1       7
    7      354.12      2       8
    8      5680.13     2       9
    9      125.55      2       10
    10     13.32       2       11
    11     5656.33     3       12
    12     456.61      3       13
    13     23.52       4       14
    14     35.35       4       15
    15     350.20      5       16
    16     30          5       17
    17     13.50       5       18
    18     323.13      6       19
    19     15.11       7       20
    20     11.22       7       21

我该如何解决这个问题?

【问题讨论】:

    标签: python pandas dataframe sorting classification


    【解决方案1】:

    使用通过比较创建的连续组,将不相等的移位值与累积和相减,然后减去 1:

    #if column is string '2'
    df['2'] = df['2'].ne(df['2'].shift()).cumsum().sub(1)
    
    #if column is number 2
    df[2] = df[2].ne(df[2].shift()).cumsum().sub(1)
    

    print (df)
        index        1  2   3
    0       0     0.00  0   1
    1       1     1.04  0   2
    2       2    32.00  0   3
    3       3     5.05  1   4
    4       4     1.01  1   5
    5       5   155.00  1   6
    6       6  3155.26  1   7
    7       7   354.12  2   8
    8       8  5680.13  2   9
    9       9   125.55  2  10
    10     10    13.32  2  11
    11     11  5656.33  3  12
    12     12   456.61  3  13
    13     13    23.52  4  14
    14     14    35.35  4  15
    15     15   350.20  5  16
    16     16    30.00  5  17
    17     17    13.50  5  18
    18     18   323.13  6  19
    19     19    15.11  7  20
    20     20    11.22  7  21
    

    【讨论】:

    • OP 的示例输出的第 7-10 行与第 0-2 行不同... - 这看起来像我知道你知道的连续组食谱,并且可能会找到一个骗子:)
    • 非常感谢。我解决了这个问题。祝你有美好的一天
    • @JonClements - 寻找骗子。
    猜你喜欢
    • 2018-11-16
    • 2019-11-18
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2020-04-16
    • 2020-03-17
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多