gpt4 book ai didi

python Pandas : How to split a sorted dictionary in a column of a dataframe

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:14 25 4
gpt4 key购买 nike

我有一个这样的数据框:

id  asn      orgs
0 3320 {'Deutsche Telekom AG': 2288}
1 47886 {'Joyent': 16, 'Equinix (Netherlands) B.V.': 7}
2 47601 {'fusion services': 1024, 'GCE Global Maritime':16859}
3 33438 {'Highwinds Network Group': 893}

我想对实际上是字典的“orgs”列进行排序,然后提取两个不同列中具有最高值的对(k,v)。像这样:

id  asn      org                      value
0 3320 'Deutsche Telekom AG' 2288
1 47886 'Joyent' 16
2 47601 'GCE Global Maritime' 16859
3 33438 'Highwinds Network Group' 893

目前我正在运行这段代码,但它没有正确排序,然后我不确定如何提取具有最高值的对。

df.orgs.apply(lambda x : sorted(x.items(),key=operator.itemgetter(1),reverse=True))

它给了我一个这样的列表:

id  asn      orgs
0 3320 [('Deutsche Telekom AG', 2288)]
1 47886 [('Joyent', 16),( 'Equinix (Netherlands) B.V.', 7)]
2 47601 [('GCE Global Maritime',16859),('fusion services', 1024)]
3 33438 [('Highwinds Network Group', 893)]

现在如何将键和最高值放入两个单独的列中?有人可以帮忙吗?

最佳答案

另一种方法是定义一个函数,该函数仅在字典上调用 min 并返回一个系列,以便您可以分配给多个列(函数体取自 @Alex Martelli's answer ):

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

编辑

如果你的数据有空的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

关于 python Pandas : How to split a sorted dictionary in a column of a dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29742975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com