按df执行df.loc至groupby df

2024-09-30 05:25:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df由人、起点和终点组成

df = pd.DataFrame({'PersonID':['1','1','2','2','2','3'],'O':['A','B','C','B','A','X'],'D':['B','A','B','A','B','Y']})

国防军:

PersonID    O       D
   1        A       B
   1        B       A      
   2        C       B
   2        B       A
   2        A       B
   3        X       Y

我用df_grouped = df.groupby(['O','D'])按df分组,并将它们与另一个数据帧taxi匹配

TaxiID    O       D
  T1      B       A
  T2      A       B
  T3      C       B

类似地,我用taxiODtaxi进行分组。然后,在汇总和计算每个O-D对的PersonID和Taxid之后,我合并了它们。我这样做是为了看看有多少出租车可供多少人使用

O     D     PersonID    TaxiID
             count      count
A     B        2          1
B     A        2          1
C     B        1          1

现在,我想执行df.loc以仅获取合并文件中计数的人名。我该怎么做?我试着告诉我们:

seek = df.loc[df.PersonID.isin(merged['PersonID'])]

但它返回一个空数据帧。我能做些什么呢

编辑:我使用虚拟数据附加此案例的完整代码

df = pd.DataFrame({'PersonID':['1','1','2','2','2','3'],'O':['A','B','C','B','A','X'],'D':['B','A','B','A','B','Y']})
taxi = pd.DataFrame({'TaxiID':['T1','T2','T3'],'O':['B','A','C'],'D':['A','B','B']})

df_grouped = df.groupby(['O','D'])
taxi_grouped = taxi.groupby(['O','D'])

dfm = df_grouped.agg({'PersonID':['count',list]}).reset_index()
tgm = taxi_grouped.agg({'TaxiID':['count',list]}).reset_index()

merged = pd.merge(dfm, tgm, how='inner')

seek = df.loc[df.PersonID.isin(merged['PersonID'])]

Tags: 数据dataframedfcountmergedlocpdt1
1条回答
网友
1楼 · 发布于 2024-09-30 05:25:30

为嵌套列表中的标量选择MultiIndexby tuplewith ^{}

seek = df.loc[df.PersonID.isin(merged[('PersonID', 'list')].explode().unique())]
print (seek)
  PersonID  O  D
0        1  A  B
1        1  B  A
2        2  C  B
3        2  B  A
4        2  A  B

为了获得更好的性能,可以将set comprehension与扁平化一起使用:

seek = df.loc[df.PersonID.isin(set(z for x in merged[('PersonID', 'list')] for z in x))]
print (seek)
  PersonID  O  D
0        1  A  B
1        1  B  A
2        2  C  B
3        2  B  A
4        2  A  B

相关问题 更多 >

    热门问题