【问题标题】:Editing data with Conditional Functions within pandas Multi index在 pandas 多索引中使用条件函数编辑数据
【发布时间】:2020-05-03 12:25:48
【问题描述】:

我对 pandas 还很陌生,我正在努力使用多个条件编辑数据透视表中的值。

我有下面的数据透视表,我正在尝试以成本编辑桌面和移动的数据。这两者是互斥的,所以如果一个帐户对桌面有费用,它会免费获得移动(移动费用应该为零),如果桌面下的费用为 0,那么移动应该是 25。

数据透视表的代码如下所示

cost_merge = pd.pivot_table(cost_merge, values=['Cost'], 
index=['ID', 'First Name', 'Last Name', 'Account Number', 'Creation Date', 'Country/Region'], 
columns=['Service Name'], fill_value=0)

当尝试使用 df.loc 形成条件时,我得到 KeyError

当我运行cost_merge.columns.levels 时,我得到FrozenList([['Cost'], ['1', 'Desktop', 'Mobile', '4', '5']])无法将它用于我想要的逻辑。

我希望最终结果看起来像这样;

感觉就像我已经浏览了 SO 上的每个 pandas 线程都试图得到答案,所以如果之前有人问过这个问题,我深表歉意。

正如我之前所说,我对 pandas 比较陌生,所以如果某些内容没有以最佳方式形成,请告诉我,以便我修复。

【问题讨论】:

    标签: python pandas pivot-table multi-index


    【解决方案1】:

    .loc 与多索引一起使用可能会很棘手,但在这种情况下与for 循环结合使用它仍然可以工作:

    for i in cost_merge.index:
        if cost_merge.loc[i, ('Cost', 'Desktop')] == 25:
            cost_merge.loc[i, ('Cost', 'Mobile')] = 0
    

    这将遍历索引并检查桌面成本的值是否等于 25,如果是,则将移动成本设置为 0。

    【讨论】:

    • 你这个圣人!谢谢@K753
    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多