根据条件保留行(Pandas)

时间:2018-03-22 11:53:12

标签: python pandas loops

我有一个dataFrame:

df.head()
Out[374]: 
   ID  Time     op1      
0   1     1 -0.0007    
1   1     2  0.0019      
2   1     3 -0.0043      
3   1     4  0.0007      
4   1     5 -0.0019

ID从1到100运行。 我有一个列表区别:

difference
Out[375]: 
[161,
 238,
 53,
 83,
 171,...

现在我想在时间中保留那些小于或等于差异中指定的行。例如:对于Id = 1,我想保留行直到Time = 161;对于ID = 2,我想保持行直到时间= 238,依此类推。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

我认为您需要使用mapenumerate创建字典,与Time列进行比较并按boolean indexing过滤:

print (df)
   ID  Time     op1
0   1     1 -0.0007
1   1     2  0.0019
2   1     3 -0.0043
3   2     4  0.0007
4   2     5 -0.0019

difference = [2, 6, 53, 83]
d = dict(enumerate(difference, 1))
print (d)
{1: 2, 2: 6, 3: 53, 4: 83}

df = df[df['Time'] < df['ID'].map(d)]
print (df)
   ID  Time     op1
0   1     1 -0.0007
3   2     4  0.0007
4   2     5 -0.0019

<强>详细

print (df['ID'].map(d))
0    2
1    2
2    2
3    6
4    6
Name: ID, dtype: int64