Python 在dataframe中查找某些列名和位置
我的输入数据是什么:Python 在dataframe中查找某些列名和位置,python,pandas,numpy,matplotlib,Python,Pandas,Numpy,Matplotlib,我的输入数据是什么: 存储在具有定义索引的数据帧中的三角形矩阵 和列名 与数据帧中的列数相同长度的列表 从列表中获取一项作为输入的函数 我下一步想做的是: 基于数据帧中的值将函数应用于列表 根据数据框的列,为另一个列表中的每个项目绘制函数结果 一个小例子: scores = np.array([[1,2,1.5,0.75], [0,1,0.75,1.25], [0,0,1,2], [0,
- 存储在具有定义索引的数据帧中的三角形矩阵 和列名
- 与数据帧中的列数相同长度的列表
- 从列表中获取一项作为输入的函数
- 基于数据帧中的值将函数应用于列表
- 根据数据框的列,为另一个列表中的每个项目绘制函数结果
scores = np.array([[1,2,1.5,0.75],
[0,1,0.75,1.25],
[0,0,1,2],
[0,0,0,1]])
names = ['Andy','Bob','Craig','Dan']
bets = [100,120,135,130]
def getPrize(bet, x): # x defined somewhere elsewhere
prize = bet*x #do stuff here
return prize
names1 = ['Andy1','Bob1','Craig1','Dan1']
Results = pd.DataFrame(data=scores,index=names1,columns=names1)
现在,我在dataframe中的值上定义了一个条件,并基于该条件,我希望找到相关列的位置(整数值,就像-相反-我使用df.iloc查找它一样)
我尝试的是:
for i, r in Results.iterrows():
found = r[r>1]
col_index = r.columns.get_loc(found)
print col_index
但这里我面临的问题是AttributeError:'Series'对象没有属性'columns'
。
但如果我写这封信:
col_ix, col_name = found.iteritems()
我获得值错误:需要超过1个值才能解包
-因此我没有正确使用iteritems?但是,如果Iprint
这些值,则会在抛出错误之前打印它们
最后,我希望有一个单独的绘图,y轴上显示“奖品”,x轴上显示姓名,根据条件为每个人绘制奖品的选定值(因此,我试图实现的另一件事是找到
姓名
列表中的哪个项目是我得到的每个列名的子字符串).最简单的只有多个:
print (results.mul(np.array(bets)))
Andy Bob Craig Dan
Andy 100.0 240.0 202.50 97.5
Bob 0.0 120.0 101.25 162.5
Craig 0.0 0.0 135.00 260.0
Dan 0.0 0.0 0.00 130.0
但如果实际功能更复杂,请使用:
编辑:
如果需要,所有列的位置都是必需的列表理解
(或某些循环),因为仅适用于标量:
for i, r in Results.iterrows():
found = r[r>1]
col_index = [r.index.get_loc(x) for x in found.index]
print (col_index)
[1, 2]
[3]
[3]
[]
我懂了!谢谢你们,回答得好,但问题错了。它不适用于我的真实数据,现在我明白了原因。我将编辑这个问题。是的,我正在考虑你的问题,这取决于你的职能。您的函数是否真的很复杂,在不应用的情况下无法使用pandas或numpy函数?如果可能,最好是添加所需的输出,也可以更改输入以更好地理解。谢谢。我现在改了问题。谢谢你的耐心。
for i, r in Results.iterrows():
found = r[r>1]
col_index = [r.index.get_loc(x) for x in found.index]
print (col_index)
[1, 2]
[3]
[3]
[]