如果特定值与列表中的值匹配,则创建新的数据框

creating a new dataframe based off if a particular value matches a value in a list

我拥有的是 pandas 数据框中的数据。有一列包含 customer_id。这些不是唯一的 ID。我有一个选定客户 ID 的列表(列表中没有重复值)。我想要做的是根据列表中的 ID 创建一个新的数据框。我想要列表中每个 id 的所有行。所有数据都已读入 str.
这是我的代码:

for i in range(len(df_ALL)):
if df_ALL.loc[i,"Customer_ID"] in ID_list:
    df_Sub = df_Sub.append(df_ALL.iloc[i,:])

当我 运行 在简单的小文件上使用它 运行 时。然而,当我 运行 它在真实数据上它 returns a "KeyError: 'the label [2666] is not in the [index]'" 我只使用 python/pandas 大约 4-5 个月,我试图研究解决这个问题的方法问题,但我找不到我理解的东西。如果有更好的方法来实现我的目标,我愿意学习。

提前致谢。

由于您尚未发布任何数据或代码,我将演示以下内容如何为您工作。您可以将列表传递给 isin,这将 return 一个布尔索引,您可以使用它来过滤 df,无需循环并附加感兴趣的行。它可能对你来说失败了(我猜是因为我没有你的数据)因为你已经结束或者你的索引不包含特定的标签值。

In [147]:

customer_list=['Microsoft', 'Google', 'Facebook']
df = pd.DataFrame({'Customer':['Microsoft', 'Microsoft', 'Google', 'Facebook','Google', 'Facebook', 'Apple','Apple'], 'data':np.random.randn(8)})
df
Out[147]:
    Customer      data
0  Microsoft  0.669051
1  Microsoft  0.392646
2     Google  1.534285
3   Facebook -1.204585
4     Google  1.050301
5   Facebook  0.492487
6      Apple  1.471614
7      Apple  0.762598
In [148]:

df['Customer'].isin(customer_list)
Out[148]:
0     True
1     True
2     True
3     True
4     True
5     True
6    False
7    False
Name: Customer, dtype: bool
In [149]:

df[df['Customer'].isin(customer_list)]
Out[149]:
    Customer      data
0  Microsoft  0.669051
1  Microsoft  0.392646
2     Google  1.534285
3   Facebook -1.204585
4     Google  1.050301
5   Facebook  0.492487