我已經爲我的問題提供了一個解決方案,但我正在尋求一種更快的方法來完成它。優化從不同指標計數
有一個只有兩列的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類型中放置函數。 –