将pd.Dataframe的特定单元格乘以python列表

时间:2019-12-10 08:42:01

标签: python pandas list dataframe

假设我们有数据框,让我们尝试像这样过滤它:

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)不起作用(((

1 个答案:

答案 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