【问题标题】:Grouping same values in one column在一列中分组相同的值
【发布时间】:2021-06-13 13:11:49
【问题描述】:

我是熊猫新手。我在数据框中有列 payment1 payment2,payment3,payment4,payment5,payment6 总共 6 列。现在这些列包含值 5(信用卡)和 10(现金)。基于此输入我想创建新列 payment(credit ) 其中所有 5 个在一个列中,所有 10 个在另一列中 付款(现金) input

输出应该是output

payment(creadit) payment(cash)
5                   10
5                   10 
                    10
5                   10
5
5                   10 

【问题讨论】:

    标签: python python-3.x pandas dataframe group-by


    【解决方案1】:
    • 生成的数据与您的图像具有相同的输入形状
    • 从功能上讲,它是跨行轴的条件总和
    • 这可以编码为r.eq(n).sum()*n
    df = pd.DataFrame({'payment1': ['', '', '', '', '', '', '', '', '', ''],
     'payment2': [10, 5, '', 5, '', '', 5, '', 5, ''],
     'payment3': ['', '', 10, '', 10, 10, '', 10, '', ''],
     'payment4': ['', '', '', '', '', '', '', '', '', ''],
     'payment5': ['', '', '', 10, '', '', '', 5, '', ''],
     'payment6': ['', '', '', '', 5, '', '', '', '', 5]})
    
    df = df.assign(**{"payment(creadit)":df.apply(lambda r: r.eq(10).sum()*10, axis=1),
                "payment(cash)":df.apply(lambda r: r.eq(5).sum()*5, axis=1)}).replace({0:""})
    
    

    输出

    payment1 payment2 payment3 payment4 payment5 payment6 payment(creadit) payment(cash)
    0 10 10
    1 5 5
    2 10 10
    3 5 10 10 5
    4 10 5 10 5
    5 10 10
    6 5 5
    7 10 5 10 5
    8 5 5
    9 5 5

    【讨论】:

    • 感谢您的解决方案。但是,如果您检查输入,那么对于每一行,值 10 或 5 只出现一次,我们需要将 10 和 5 的值分开进行求和。
    • 它适用于您注意到的情况。如果您将输入数据作为文本而不是不可用的图像提供,我将演示
    • 我已经更新了 - 正如所指出的,随着输入数据的改变,解决方案没有改变。逻辑是合理的:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2014-06-03
    相关资源
    最近更新 更多