我已经为我的问题提供了一个解决方案,但我正在寻求一种更快的方法来完成它。优化从不同指标计数
有一个只有两列的DataFrame。
In[1]: import pandas as pd
In[2]: temp = pd.DataFrame({'id':['a','a','a','b','b','b'],'col1':[1,2,3,1,2,5],'col2':[1,2,4,1,3,4]}).set_index('id')
In[3]: temp
Out[3]:
col1 col2
id
a 1 1
a 2 2
a 3 4
b 1 1
b 2 3
b 5 4
现在,这是我的问题。我想获得具有两列最常见值的ID。我目前的解决方案是对如下:
In[4]: def count_num(table_name): return (sum(table_name.col1==table_name.col2))
In[5]: best_value, best_ans = [0], [0]
In[6]: for m in np.unique(temp.index):
...: temp_ans = count_num(temp.loc[m])
...: if temp_ans > best_value[0]:
...: best_value.append(temp_ans)
...: best_ans.append(m)
...: best_value = best_value[1:]
...: best_ans = best_ans[1:]
我的小例子,答案是“A”
In[7]: best_ans
Out[7]: ['a']
正如你可以找出来,我用一个for循环运行功能的一个指标时间如果有很多不同的索引,它会浪费时间。
我希望我可以做同样的事情,而不使用循环。
谢谢你的帮助!
在你的榜样, '1'似乎是最常见的值,但它在行1和行5中都是索引'a'和'b'。看起来,您希望连接级数中所有值的唯一索引值等于中位数,但也许我不明白你的问题。 – Alexander
在我的例子中,我想获得col1最多的col2 == col2。我想知道的一点是如何在不使用for循环的情况下在这种DataFrame类型中放置函数。 –