我已经与熊猫合作了一段时间,但我还没有弄清楚如何获得以下结果。
DF A由包含活动和非活动LOB的记录组成。我要删除不活动的LOB。但是,状态之间的非活动LOB有所不同。
DF B由作为列的状态和在结果列中的非活动LOB组成。
所以,我想要一个不包含任何非活动LOB的结果DF。
ex:在OH中不活跃的LOB 78在MI中可以活跃。 推理:
在DF a中:您可以看到状态为OH且LOB为78的记录。我不希望在DF C中看到该记录,因为由于DF b的OH列中存在78,因此该记录被认为是不活动的。
在DF a中:您可以看到状态为MI且LOB为78的记录。我想要在DF C中记录,因为DF b的MI列中没有78
DF A中有500k条记录。运行时间不是问题,但是如果少于5分钟就可以了。
(我从dict : [{state: [list of inactive lob]}]
的列表中读取了DF B)
样本DF A:
Name, state, LOB, ID
a , OH , 66 , 7979
aa , OH , 78 , 12341
bas , OH , 67 , 13434
basd, VT , 99 , 1241234
badf, MI , 77 , 12341234
bbdf, MI , 78 , 12341234
caff, VT , 66 , 2134
cdse, AZ , 01 , 232
样本DF B:
OH , VT , MI
66 , 99 , 77
78 , 23
我想要一个DF C:
Name, state, LOB, ID
bas , OH , 67 , 13434
bbdf, MI , 78 , 12341234
caff, VT , 66 , 2134
cdse, AZ , 01 , 232
答案 0 :(得分:2)
IIUC,您可以先融化dfb
dfc= pd.merge(
dfa,
pd.melt(dfb, var_name="state", value_name="LOB"),
on=["state", "LOB"],
how="left",
indicator=True,
).query('_merge != "both"').drop("_merge", axis=1)
print(dfc)
Name state LOB ID
2 bas OH 67 13434
5 bbdf MI 78 12341234
6 caff VT 66 2134
7 cdse AZ 1 232
答案 1 :(得分:0)
您可以使用多重索引来实现此目标,如下所示:
首先,同时使用onResponse
和private void loadNextPersons() {
AWSAppSyncClient client = AppSyncClientFactory.getAppSyncClient(AppSyncAuthMode.KEY);
client.query(AllPersonsByCityQuery.builder()
.city(cityName)
.limit(10)
.nextToken(nextToken)
.build())
.responseFetcher(AppSyncResponseFetchers.CACHE_AND_NETWORK).enqueue(loadCallback);
}
private GraphQLCall.Callback<AllPersonsByCityQuery.Data> loadCallback= new GraphQLCall.Callback<AllPersonsByCityQuery.Data>() {
@Override
public void onResponse(@Nonnull Response<AllPersonsByCityQuery.Data> response) {
// Called twice if we have data in the cache and network connection
runOnUiThread(() -> {
adapter.addData(response.data().allPersonsByCity().persons());
}
}
}
进行索引A:
state
然后删除A中不需要的行:
LOB
此A2 = A.set_index(['state', 'LOB'])
之后将仅包含所需的行。让我知道是否有帮助。