我试图将pandas中的查询输出从一系列的格式转换为字符串的格式。 功能如下(金*是列)
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,所以我认为有一些类似的东西,同样简单的输出作为字符串。
答案 0 :(得分:1)
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'
答案 1 :(得分: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()