如何解决重复应用过滤器,直到条件用完Python
我想通过重复删除满足某些条件的对来过滤数据帧,直到条件用尽。
df
:
Date ITEM_ID TYPE VALUE
342874 2012-06-18 ECE240 O 1.0
342415 2012-06-18 ECE240 O 25.0
325718 2012-06-18 ECE240 O 1.0
334488 2012-06-18 ECE240 O 1.0
342412 2012-06-18 ECE240 O 25.0
341634 2012-06-18 ECE240 O 9.0
341996 2012-06-19 ECE240 O 2.0
341747 2012-06-19 ECE240 O 1.0
272185 2012-06-24 ECE240 I 1.0
219 2012-06-24 ECE240 I 1.0
6896 2012-06-24 ECE240 I 2.0
351560 2012-06-24 ECE240 O 1.0
312636 2012-06-26 ECE240 I 1.0
2376 2012-06-30 ECE240 I 1.0
350922 2012-07-02 ECE240 O 1.0
270589 2012-07-09 ECE240 I 4.0
331689 2012-07-15 ECE240 I 1.0
299912 2012-07-23 ECE240 I 1.0
212418 2012-07-23 ECE240 I 3.0
3992 2012-07-24 ECE240 I 2.0
388937 2012-08-10 ECE240 O 10.0
124596 2012-08-18 ECE240 I 1.0
368945 2012-08-19 ECE240 O 12.0
368944 2012-08-19 ECE240 O 6.0
239581 2012-08-24 ECE240 I 4.0
任意两行成对满足的条件是:
- 这两行具有相同的
ITEM_ID
; - 这两行具有相同的
VALUE
; - 前面的行为'TYPE == O',后面的行为'TYPE == I'
代码:
mask = df.sort_values('Date')\
.groupby(['ITEM_ID','VALUE'])['TYPE']\
.apply(lambda x: ((x == 'O') & (x.shift(-1) == 'I')) | (x == 'I') & (x.shift(1) == 'O'))
df= df.loc[~mask]
df
我可以通过重复应用几次过滤器来手动执行此操作,但是我不确定在条件耗尽之前需要应用多少次过滤器。我想知道是否可以使用while loop
来做到这一点,也许像这样:
def myfunc(df):
mask = df.sort_values('Date')\
.groupby(['ITEM_ID','VALUE'])['TYPE']\
.apply(lambda x: ((x == 'O') & (x.shift(-1) == 'I')) | (x == 'I') & (x.shift(1) == 'O'))
df = df.loc[~mask]
return df
while True:
myfunc(df)
但是,与手动执行该功能相比,运行该功能需要花费很长时间(几分钟并且仍在运行),总共只需要花费几秒钟。
解决方法
您可以将代码放入while循环中,并在MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//Here image is the absolute path of the file you want to post
FileBody fbd=new FileBody(new File(image));
builder.addPart("my_file",fbd);
for (int index = 0; index < nameValuePairs.size(); index++) {
builder.addPart(nameValuePairs.get(index).getName(),new StringBody(nameValuePairs.get(index).getValue(),ContentType.TEXT_PLAIN));
}
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);//your url
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
String response = httpEntity.getContent();
和 Welcometxt.setText("Welcome ");
Welcometxt.setTextColor(Color.parseColor(getIntent().getStringExtra("Welcome")));
相同时(即不再剩余匹配项)中断代码。
cur_length
输出:
new_length
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。