假设我们有数据框,让我们尝试像这样过滤它:
df[df[0] == 'Test_value'].iloc[:, 1:5]
因此,我们已在列Test_value
中按值0
进行了过滤,因此我们仅采用1到5列。现在我想从数据框中更改这些值。我想将它们乘以[1,3,1,2]之类的列表。
最后,我希望仅在那些特定单元格中具有更改的初始数据框。
ps:df.mul()
函数很好,但是只返回了更改后的单元格(df[df[0] == 'Test_value].iloc[:, 1:5])
,但是我无法将它们设置为我的初始数据帧:df[df[0] == 'Test_value].iloc[:, 1:5] = df[df[0] == 'Test_value].iloc[:, 1:5].mul(list)
不起作用(((
答案 0 :(得分:0)
问题在于链索引,可能的解决方案是通过DataFrame.iloc
进行过滤,而只有通过Series.to_numpy
将布尔型掩码转换为numpy数组:
df = pd.DataFrame({
0:['Test_value'] *6,
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':[5,3,6,9,2,4],
})
dont use variable list because builtins
L = [1,3,1,2]
#pandas 0.24+
df.iloc[(df[0] == 'Test_value').to_numpy(), 1:5] *= L
#pandas below
#df.iloc[(df[0] == 'Test_value').values, 1:5] *= L
print (df)
0 B C D E F
0 Test_value 4 21 1 10 5
1 Test_value 5 24 3 6 3
2 Test_value 4 27 5 12 6
3 Test_value 5 12 7 18 9
4 Test_value 5 6 1 4 2
5 Test_value 4 9 0 8 4