另一种方法定义一个只调用的函数min
在字典上并返回一个系列,以便您可以分配给多个列(函数体取自@亚历克斯·马泰利的回答 https://stackoverflow.com/questions/3282823/get-key-with-the-least-value-from-a-dictionary):
In [17]:
def func(x):
k = min(x, key=x.get)
return pd.Series([k, x[k]])
df[['orgs', 'value']] = df['orgs'].apply(func)
df
Out[17]:
asn id orgs value
0 3320 0 Deutsche Telekom AG 2288
1 47886 1 Equinix (Netherlands) B.V. 7
2 47601 2 fusion services 1024
3 33438 3 Highwinds Network Group 893
EDIT
如果你的数据有空的dicss,那么你可以只测试len
:
In [34]:
df = pd.DataFrame({'id':[0,1,2,3,4],
'asn':[3320,47886,47601,33438,56],
'orgs':[{'Deutsche Telekom AG': 2288},
{'Joyent': 16, 'Equinix (Netherlands) B.V.': 7},
{'fusion services': 1024, 'GCE Global Maritime':16859},
{'Highwinds Network Group': 893},{}]})
df
Out[34]:
asn id orgs
0 3320 0 {'Deutsche Telekom AG': 2288}
1 47886 1 {'Equinix (Netherlands) B.V.': 7, 'Joyent': 16}
2 47601 2 {'GCE Global Maritime': 16859, 'fusion service...
3 33438 3 {'Highwinds Network Group': 893}
4 56 4 {}
In [36]:
def func(x):
if len(x) > 0:
k = min(x, key=x.get)
return pd.Series([k, x[k]])
return pd.Series([np.NaN, np.NaN])
df[['orgs', 'value']] = df['orgs'].apply(func)
df
Out[36]:
asn id orgs value
0 3320 0 Deutsche Telekom AG 2288
1 47886 1 Equinix (Netherlands) B.V. 7
2 47601 2 fusion services 1024
3 33438 3 Highwinds Network Group 893
4 56 4 NaN NaN