数据帧1等于x更改数据帧y的位置

时间:2017-01-26 17:19:18

标签: python pandas

我有两个数据帧:

第一个:

a = {'Price': [10, 15, 20, 25, 30], 'Total': [10000, 12000, 10000, 11000, 10000],
     'Previous Quarter': [9000, 10000, 12000, 15000, 14000]}
a = pd.DataFrame(a)
print (a)

第二个是:

b = {'Price': [0, 94, 82, 16, 31], 'Total': [0, 900, 11000, 11000, 14000],
     'Previous Quarter': [0, 11000, 11000, 14000, 17000]}
b = pd.DataFrame(b)
print (b)

如何替换数据框中的值' a'在零数据框中为零' b'等于零?

所以我想要的输出是

a = {'Price': [0, 15, 20, 25, 30], 'Total': [0, 12000, 10000, 11000, 10000],
 'Previous Quarter': [0, 10000, 12000, 15000, 14000]}
a = pd.DataFrame(a)
print (a)

4 个答案:

答案 0 :(得分:3)

由于它们具有相同的索引,因此可以:

a[b==0] = 0

另一种写作风格:

a.where(b!=0, 0)

答案 1 :(得分:2)

mask的另一种解决方案:

a.mask(b==0,0)

编辑:看时间:

In [33]: %timeit a.mask(b==0,0)
1000 loops, best of 3: 1.47 ms per loop

In [34]: %timeit a[b==0] = 0
1000 loops, best of 3: 1.49 ms per loop

In [35]: %timeit a.where(b!=0, b)
100 loops, best of 3: 1.82 ms per loop

In [36]: %timeit a.where(b!=0, 0)
1000 loops, best of 3: 1.37 ms per loop

答案 2 :(得分:0)

因为看起来你是python的新手,这是一个没有列表理解的非常基本的解决方案:

for key,val in a.items():
    for i in range(len(val)):
        if b[key][i] == 0:
            a[key][i] = 0

输出:

   Previous Quarter  Price  Total
0                 0      0      0
1             10000     15  12000
2             12000     20  10000
3             15000     25  11000
4             14000     30  10000

答案 3 :(得分:0)

for col in a.columns:

    for index in a.index:

        if b.loc[index,col] == 0:

            a.loc[index,col] = b.loc[index,col]
希望有所帮助!