在满足特定条件后,如何删除数据框中的所有行?例如,我有以下数据框:
import pandas as pd
xEnd=1
yEnd=2
df = pd.DataFrame({'x':[1,1,1,2,2,2], 'y':[1,2,3,3,4,3], 'id':[0,1,2,3,4,5]})
我将如何获得一个数据帧,该数据帧将删除最后4行,并保持高2位(与第2行相同),满足条件x=xEnd
和y=yEnd
。
编辑:应该提到数据框不一定是升序的。也可以下降,我仍然想获得较高的。
答案 0 :(得分:2)
要在第一次满足2个系列的条件之前对数据帧进行切片,直到 ,首先计算所需的索引,然后通过iloc
进行切片。
您可以通过set_index
,isin
和np.ndarray.argmax
计算索引:
idx = df.set_index(['x', 'y']).isin((xEnd, yEnd)).values.argmax()
res = df.iloc[:idx+1]
print(res)
x y id
0 1 1 0
1 1 2 1
如果您需要更好的性能,请参见Efficiently return the index of the first value satisfying condition in array。
答案 1 :(得分:1)
不是100%肯定我理解正确,但是您可以像这样过滤数据框:
import java.util.HashSet;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set<String> placeSet=new HashSet<String> ();
String s1="traffic";
String s2="mumbai";
String s3="Mumbai";
String s4="roadcollapse";
placeSet.add(s1.toLowerCase());
placeSet.add(s2.toLowerCase());
placeSet.add(s3.toLowerCase());
placeSet.add(s4.toLowerCase());
for (String place:placeSet)
{
if (!place.contains("traffic") || !place.contains("collapse"))
{
System.out.println (place);
}
}
}
}
这将产生数据框:
df[(df.x <= xEnd) & (df.y <= yEnd)]
如果x和y没有严格增加,并且您希望满足条件的行上方的内容是
id x y
0 0 1 1
1 1 1 2
答案 2 :(得分:0)
+
仅选择前两行,并保留所有列并将其放在新的数据框中。 或者,您也可以使用相同名称的变量。