2017-10-18 94 views
-1

我试图将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 

其中国家是索引的名称和BUL是ID字段的值。 我已经尝试添加.astype(str)来获取国家或ID的名称,但没有成功。如果我在前面加上“len”,我会得到答案1,所以我认为有一些类似的东西,就像将字符串转换为输出一样简单。

+1

,不显示任何样品数据-1 –

回答

1

如果输出始终为1元Series(因为只有一个max)使用Series.item

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

但是我f可能的多个最大值,然后如果失败。


所以是更多钞票返回列表或从列表中加入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() 
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' 
+0

这不是我正在寻找的,因为我想要更一般的东西。尽管如此,你的回答也很有帮助。还感谢我的代码缩进。 –

相关问题