根据列表有条件地替换DataFrame列内容

时间:2018-10-22 03:46:55

标签: python pandas dataframe

我有一个数据框和一个列表,我正在尝试根据列表更新数据框的列。

df= pd.DataFrame()
df['ID']=[1,2,3,4,5,6]
df['Quantity']=[100,10,20,30,40,50]
zero_list=[2,3]

对于零列表中提到的ID,我想将“数量”替换为零。

一种实现方法是将列表转换为元组并使用np。在这里,我想看看另一种实现方法,因为从列表到元组的转换仍然会产生可散列错误。

下表来自for循环:

                                   id     Quantity
0                                  []         0
1                                  []         0
2                                  []         0
3                                  []         0
4                                  []         0
5                                  []         0
6                                  []         0
7                                  []         0
8                                  []         0
9                                  []         0
10                                 []         0
11                                 []         0
12                                 []         0
13                                 []         0
14                                 []         0
15              [20529, 25000, 22123]         0
16                                 []         0

我正在从第15行创建零列表。

2 个答案:

答案 0 :(得分:0)

尝试

df.loc[df['ID'].isin(zero_list), 'Quantity']=0

df['ID'].isin(zero_list)np.where

一样创建了一个蒙版

答案 1 :(得分:0)

听起来像您需要的

df.loc[df['ID'].isin(zero_list),'Quantity']=0

因此,使用loc来获取IDzero_list列中的值,然后将Quantity列设为零,

或使用eval,基本上是一样的事情:

df.loc[df.eval('ID in @zero_list'),'Quantity']=0