Python 数据框 - 分组系列

Python dataframes - grouping series

我正在尝试在 python 中执行过滤器,但我卡在了最后,当我需要对结果进行分组时。

我有一个 json,就是这个:https://api.jsonbin.io/b/62300664a703bb67492bd3fc/3

我想用它做的是过滤“apiFamily”以搜索“payments-ted”或“payments-doc”。如果找到匹配项,则我必须验证“ApiEndpoints”列中至少有两个端点。

我的最终目标是在一行中附加“apiFamily”,在另一行中附加所有 ApiEndpoints。像这样:

  "ApiFamily": [
   "payments-ted",
   "payments-doc"
  ]
  "ApiEndpoints": [
    "/ted",
    "/electronic-ted",
    "/phone-ted",
    "/banking-ted",
    "/shared-automated-teller-machines-ted"
    "/doc",
    "/electronic-doc",
    "/phone-doc",
    "/banking-doc",
    "/shared-automated-teller-machines-doc"
  ]

我已经做到了部分成功,搜索一个条件:

#ApiFilter = df[(df['ApiFamily'] == 'payments-pix') & (rolesFilter['ApiEndpoints'].apply(lambda x: len(x)) >= 2)]

这显然只提取包含两个或更多 ApiEndpoint 的 payments-pix。

现在我可以设法检查这两个条件,如果我尝试这样做:

#ApiFilter = df[((df['ApiFamily'] == 'payments-ted') | (df['ApiFamily'] == 'payments-doc') &(df['ApiEndpoints'].apply(lambda x: len(x)) >= 2)]

我会得到正确的行,但它显然会列出两次品牌。

当我尝试对结果进行分组时,我得到的是:

TypeError: unhashable type: 'Series'

我的疑惑是:如何避免这个错误?我想我必须对一行中有多个元素的列进行某种转换,但最好的方法是什么?

我试过这个解决方案,有点round-about但得到了你想要的最终结果

首先获取数据到一个字典对象中

>>> import requests
>>> url = 'https://api.jsonbin.io/b/62300664a703bb67492bd3fc/3'
>>> response = requests.get(url)
>>> d = response.json()

我们只需要将 ApiFamily 和 ApiEndpoints 放入新字典中

>>> dNew = {}
>>> for item in d['data'] :
>>>    if item['ApiFamily'] in ['payments-ted','payments-doc']:
>>>        dNew[item['ApiFamily']] = item['ApiEndpoints']

dNew 更改为数据框并转置它。

>>> df1 = pd.DataFrame(dNew)
>>> df1 = df1.applymap ( lambda x : '\'' + x + '\'')
>>> df2 = df1.transpose()

现阶段df2看起来像这样-

>>> print(df2)

0                  1             2               3  \
payments-ted  '/ted'  '/electronic-ted'  '/phone-ted'  '/banking-ted'   
payments-doc  '/doc'  '/electronic-doc'  '/phone-doc'  '/banking-doc'   

                                                    4  
payments-ted  '/shared-automated-teller-machines-ted'  
payments-doc  '/shared-automated-teller-machines-doc'  

现在使用逗号连接所有列

>>> df2['final'] = df2.apply(  ','.join , axis=1)

终于

>>> df2 = df2[['final']]
>>> print(df2)

              final
payments-ted  '/ted','/electronic-ted','/phone-ted','/bankin...
payments-doc  '/doc','/electronic-doc','/phone-doc','/bankin...