如果特定值与列表中的值匹配,则创建新的数据框
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
我拥有的是 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