我有一个数据框:
Data = {'group': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'],
'value1': [2, 0, 0, 5, 5, 5, 6, 31, 7, 5, 0, 99],
'value2': [25, 12 ,15, 11, 36, 3, 65, 6, 89, 8, 74, 5]
}
current_result = pd.DataFrame(Data, columns = ['group','value1', 'value2'])
如果相应的value2
等于零,我想将value1
设置为零,同时保持所有其他值相同。所以我想要的结果是:
Data = {'group': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'],
'value1': [2, 0, 0, 5, 5, 5, 6, 31, 7, 5, 0, 99],
'value2': [25, 0 ,0, 11, 36, 3, 65, 6, 89, 8, 0, 5]
}
current_result = pd.DataFrame(Data, columns = ['group','value1', 'value2'])
我该怎么办?
答案 0 :(得分:2)
使用df.loc[]
current_result.loc[current_result.value1.eq(0),'value2']=current_result.value1
print(current_result)
group value1 value2
0 a 2 25
1 b 0 0
2 c 0 0
3 d 5 11
4 e 5 36
5 f 5 3
6 g 6 65
7 h 31 6
8 i 7 89
9 j 5 8
10 k 0 0
11 l 99 5
答案 1 :(得分:2)
您可以乘以布尔掩码-True
是1
之类的进程,False
是0
之类的进程,因此用{{3}比较不等于0
}:
current_result['value2'] *= current_result['value1'].ne(0)
print (current_result)
group value1 value2
0 a 2 25
1 b 0 0
2 c 0 0
3 d 5 11
4 e 5 36
5 f 5 3
6 g 6 65
7 h 31 6
8 i 7 89
9 j 5 8
10 k 0 0
11 l 99 5
答案 2 :(得分:1)
使用此:
current_result.loc[current_result['value1'] == 0, ['value2']] = 0
答案 3 :(得分:0)
current_result.loc[current_result['value1'] == 0, 'value2'] = 0
答案 4 :(得分:0)
不使用任何Pandas核心功能,此循环即可完成工作:
for index, value in enumerate(current_result["value1"]):
if value == 0:
current_result["value2"][index] = 0
答案 5 :(得分:0)
def change_value(row):
if row.value1 == 0:
row.value2 = 0
return row
current_result = current_result.apply(change_value, axis=1)