Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在多索引中使用条件函数编辑数据_Python_Pandas_Pivot Table_Multi Index - Fatal编程技术网

Python 在多索引中使用条件函数编辑数据

Python 在多索引中使用条件函数编辑数据,python,pandas,pivot-table,multi-index,Python,Pandas,Pivot Table,Multi Index,我对pandas还相当陌生,我正在努力使用多种条件编辑数据透视表中的值 我有下面的透视表,我正试图编辑桌面和移动设备的数据,但成本较低。这两者是互斥的,因此,如果一个帐户对桌面有成本,它将免费获得移动(移动成本应为零),如果桌面下的成本为0,则移动成本应为25 透视表的代码如下所示 cost_merge = pd.pivot_table(cost_merge, values=['Cost'], index=['ID', 'First Name', 'Last Name', 'Account

我对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\u merge.columns.levels
时,我会得到
FrozenList([['cost'],['1','Desktop','Mobile','4','5']])
但是我无法将其用于我想要的逻辑

我希望最终结果是这样的

我觉得我已经通过了每一个熊猫线程,所以试图得到答案,所以道歉,如果有人问过


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

使用
.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