我有两个数据帧:
第一个:
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)
答案 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]
希望有所帮助!