【问题标题】:How to assign a column value based on number of rows in that group如何根据该组中的行数分配列值
【发布时间】:2018-11-15 09:59:23
【问题描述】:

创建一些测试数据:

import pandas as pd
import numpy as np

ID = pd.DataFrame(np.random.randint(0,1000000,size=(100, 1)), columns=['ID'])
Prob = pd.DataFrame(np.random.randint(0, 100,size=(100, 1)), columns=['Probability'])/100


cuts = [{'flag': 'L', 'cut': 44},
         {'flag': 'M', 'cut': 31},
         {'flag': 'H', 'cut': 25}]

cuts = pd.DataFrame(cuts)

df = pd.concat([ID.reset_index(drop=True), Prob], axis=1)
df = df.sort_values(by=['Probability'])
df["flag"] = np.nan

我正在使用两个数据集,一个是来自预测模型的概率列表,另一个是根据给出的列表长度计算的切点列表。我想找到一种有效的方法将这些值分配给 df 的“标志”列。

对于本例,前 44 行将被分配“L”,接下来的 31 行将被分配“M”,最后 25 行将被分配“H”

我的环境有更多不同的标志值和数百万行,但为简单起见,我在示例中使用了 100 行和 3 个标志。

如何使用“下一个 x 行数”而不是索引或其他引用键来分配这些标志?

【问题讨论】:

    标签: python pandas loops


    【解决方案1】:

    使用repeat:

    df['flag'] = cuts['flag'].repeat(cuts['cut']).values
    

    输出:

            ID  Probability flag
    1   803927         0.02    L
    50  356764         0.03    L
    52  132415         0.03    L
    28  699693         0.03    L
    20  296581         0.03    L
    .
    .
    .
    76  236620         0.97    H
    70   56385         0.99    H
    92  205281         0.99    H
    75  804810         0.99    H
    29  773553         0.99    H
    

    【讨论】:

    • 谢谢,这比我想象的要简单得多。
    猜你喜欢
    • 2020-09-27
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多