python - 如何根据Python中的条件用2级列替换数据框中的值?

标签 python pandas numpy compare

我使用Python 3.6.1。这是我的数据框 myDF,我想操纵其值:

    a     b          c      
    a    X1    X2   X1    X2
 0  10    .     o    o     o
 1  20    .     o    o     o
 2  30    .     o    o     o

如您所见,级别 0 上有列“a”、“b”、“c”,级别 1 上有列“a”、“X1”、“X2”。

我需要比较 b/c 下 X1 中的值是否等于 X2 中的相应值,如果是,则删除这些值。因此,对上述数据框的操作应返回:

    a     b          c      
    a    X1    X2   X1    X2
 0  10    .     o         
 1  20    .     o         
 2  30    .     o         

这是获取源数据框的方法:

import numpy
import pandas

X1 = pandas.DataFrame(data=[[10,'.','o'],[20,'.','o'],[30,'.','o']],
                      columns=['a','b','c'])
X2 = pandas.DataFrame(data=[[10,'o','o'],[20,'o','o'],[30,'o','o']],
                      columns=['a','b','c'])

myDF = pandas.concat([X1.set_index('a'), X2.set_index('a')],
                     axis='columns', keys=['X1','X2'])
myDF = myDF.swaplevel(axis='columns')[X1.columns[1:]]
myDF = myDF.reset_index(col_level=1, col_fill='a')

到目前为止我尝试过的是:

other = myDF.xs('X1', axis=1, level=-1)
main = numpy.where(myDF.eq(other, level=0), 'x', 'y')
pandas.DataFrame(main, index=myDF.index, columns=myDF.columns)

这给出:

   a    b          c      
   a   X1    X2   X1    X2
0  F    T     F    T     T
1  F    T     F    T     T
2  F    T     F    T     T

并且不知道如何继续前进......

最佳答案

我的整个目标是创建一个包含两列的临时数据框,['X1', 'X2'] 这样我就可以屏蔽它们相等的行。这让我得到两列:

myDF.set_index(('a', 'a')).stack(0)

         X1 X2
(a, a)        
10     b  .  o
       c  o  o
20     b  .  o
       c  o  o
30     b  .  o
       c  o  o

我可以将其保存为临时名称,然后在其他几行中进行操作。或者我可以按照管道执行任务。

myDF.set_index(('a', 'a')).stack(0).pipe(
    lambda d: d.mask(d.X1 == d.X2, '')
)

         X1 X2
(a, a)        
10     b  .  o
       c      
20     b  .  o
       c      
30     b  .  o
       c      

剩下的只是会计工作,让一切恢复原状。

myDF.set_index(('a', 'a')).stack(0).pipe(
    lambda d: d.mask(d.X1 == d.X2, '')
).unstack().swaplevel(0, 1, 1).sort_index(1).reset_index()

    a  b     c   
    a X1 X2 X1 X2
0  10  .  o      
1  20  .  o      
2  30  .  o      

关于python - 如何根据Python中的条件用2级列替换数据框中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47289392/

相关文章:

python - 将特定的 TensorFlow 变量恢复到特定层(按名称恢复)

python - 值错误: "cannot reindex from a duplicate axis" in groupby Pandas

python - 使用 PySide 将 QImage 转为 Numpy 数组

python - 如何将概率列表转换为二进制值

python - nltk 的 Tornado 多进程崩溃

python - 如何在 mac osx 上更新 python-sqlite

python - 如何打印 Pandas 合并的错误类型?

python - 在多索引 Groupby 对象中填充 Nan 值

python - matplotlib 如何知道要在此代码中显示什么?

python - 将 scipy.lil_matrix 除以向量