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...
我正在尝试在 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...