我有一个 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>
最佳答案
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
关于python - 如何在一行中的至少一个元素中选择包含特定值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37230696/