Skip to main content
 首页 » 编程设计

python之如何在一行中的至少一个元素中选择包含特定值的行

2025年05月04日26tintown

我有一个 DataFrame DF 和一个列表,比如 List1。 List1 是从 DF 创建的,它具有 DF 中存在的元素但没有重复。我需要执行以下操作:
1.从List1中选择DF中包含特定元素的行(例如,遍历List1中的所有元素)
2. 将它们从 0 重新索引到任何行数,因为所选行可能具有非连续索引。

示例输入:

List1=['Apple','Orange','Banana','Pineapple','Pear','Tomato','Potato'] 
Sample DF 
  EQ1      EQ2      EQ3 
0 Apple    Orange   NaN 
1 Banana   Potato   NaN 
2 Pear     Tomato   Pineapple 
3 Apple    Tomato   Pear 
4 Tomato   Potato   Banana 

现在,如果我想访问包含 Apple 的行,它们将是 0 和 3。但我希望将它们重命名为 0 和 1(重新索引)。搜索到Apple后,应该从List1中取出下一个元素,并执行类似的步骤。在此之后我还有其他操作要执行,因此我需要在 List1 中循环整个过程。我希望我已经很好地解释了它,这是我的代码,但它不起作用:

for eq in List1: 
    MCS=DF.loc[MCS_Simp_green[:] ==eq] #Indentation was missing 
    MCS= MCS.reset_index(drop=True) 
    <Remaining operations> 

请您参考如下方法:

我想你需要isin与 any :

List1=['Apple','Orange','Banana','Pineapple','Pear','Tomato','Potato'] 
 
for eq in List1: 
    #print df.isin([eq]).any(1) 
    #print df[df.isin([eq]).any(1)] 
    df1 = df[df.isin([eq]).any(1)].reset_index(drop=True)   
    print df1 
 
     EQ1     EQ2   EQ3 
0  Apple  Orange   NaN 
1  Apple  Tomato  Pear 
     EQ1     EQ2  EQ3 
0  Apple  Orange  NaN 
      EQ1     EQ2     EQ3 
0  Banana  Potato     NaN 
1  Tomato  Potato  Banana 
    EQ1     EQ2        EQ3 
0  Pear  Tomato  Pineapple 
     EQ1     EQ2        EQ3 
0   Pear  Tomato  Pineapple 
1  Apple  Tomato       Pear 
      EQ1     EQ2        EQ3 
0    Pear  Tomato  Pineapple 
1   Apple  Tomato       Pear 
2  Tomato  Potato     Banana 
      EQ1     EQ2     EQ3 
0  Banana  Potato     NaN 
1  Tomato  Potato  Banana 

要存储值,您可以使用 dict 理解:

dfs = {eq: df[df.isin([eq]).any(1)].reset_index(drop=True) for eq in List1} 
 
print dfs['Apple'] 
     EQ1     EQ2   EQ3 
0  Apple  Orange   NaN 
1  Apple  Tomato  Pear 
 
print dfs['Orange'] 
     EQ1     EQ2  EQ3 
0  Apple  Orange  NaN