将pandas系列输出转换为字符串



我正在尝试将panda中的查询输出从序列格式转换为字符串格式。功能如下(金色*为列)

def try_three():
import numpy as np
nz=df[(df["Gold"]>0) & (df["Gold.1"]>0) & (df["Gold.2"]>0)]
nz["average"]=((nz["Gold"])-(nz["Gold.1"]))/(nz["Gold.2"])
return nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"]

输出为

Country
Bulgaria    BUL
Name: ID, dtype: object

其中Country是索引的名称,BUL是ID字段的值。我已经尝试附加.astype(str)来只获取国家或ID的名称,但没有成功。如果我在前面加上"len",我得到的答案是1,所以我认为有一些类似的东西,并且把输出作为字符串一样简单。

如果输出总是1个元素Series(因为只有一个max),则使用Series.item:

nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"].item()

但如果可能,多个最大值,如果失败。


因此可能返回列表或从列表加入string

nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"].tolist()

或者:

', '.join(nz.where(nz["average"]==np.max(nz["average"])).dropna())["ID"].tolist()

如果想要通用解决方案:

a = nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"]
if len(a) == 1:
return a.item()
else:
return ', '.join(a) # a.tolist()

IIUC您想要获得系列中的第一个元素(ID列):

df['ID'].iat[0]

演示:

In [77]: df = pd.DataFrame({'ID':['BUL']}, index=['Bulgaria']).rename_axis('Country')
In [78]: df
Out[78]:
ID
Country
Bulgaria  BUL
In [79]: df['ID']
Out[79]:
Country
Bulgaria    BUL
Name: ID, dtype: object
In [80]: df['ID'].iat[0]
Out[80]: 'BUL'

最新更新