【问题标题】:Numpy finds most common item per value from another columnNumpy 从另一列中找到每个值最常见的项目
【发布时间】:2021-05-21 06:02:03
【问题描述】:

我正在开发一个 kMeans AI 来确定任何一天的季节 为此,我有一个包含 4 列数据的数组 这就是它的样子(虽然它更长):

['0.2742330338168506' '0' '1.3694492732480696' 'winter']
['0.28529288153011745' '0' '1.3805091209613365' 'lente']
['0.28595917620794253' '1' '1.3811754156391616' 'winter']
['0.2874392369724381' '2' '1.3826554764036572' 'lente']
['0.316557712713994' '2' '1.411773952145213' 'herfst']
['0.32113534393276466' '3 '1.4163515833639837' 'lente']
['0.3231108855082745' '3' '1.4220488660040091' 'lente']
['0.3163219663513872' '3' '1.4288377851608964' 'winter']
['0.31201423701381703' '4' '1.4331455144984666' 'lente']
['0.3081781460867783' '4' '1.4369816054255053' 'lente']
['0.29534720251567403' '4' '1.4498125489966096' 'winter']

现在我知道如何在整个数组中找到最常见的项目,就像这样

Counter(array.flat).most_common()

但是对于这个,我需要每个簇第 4 列中最常见的项目,即第二列中的值,除了制作一个长 for 循环并将它们全部计数之外,还有更简单的方法吗?

【问题讨论】:

  • 尝试将其放入带有列('a'、'b'、'c'、'd')的 pandas df 中,然后运行:import pandas as pd;df.groupby('b')['d'].agg(pd.Series.mode)
  • @Matt 看看为什么 mode() 不能与 groupby() 一起工作:github.com/pandas-dev/pandas/issues/13809
  • 这很有趣,也许只需将其更改为可以使用的模式功能:from scipy.stats import mode;df.groupby('b')['d'].apply(mode)

标签: python numpy k-means numpy-ndarray


【解决方案1】:

由于某种原因,cmets 中建议的解决方案抛出了ValueError。所以这里有一个使用 pandas 的替代解决方案:

import pandas as pd

data = [] #A nested list for data shown in your question
df = pd.DataFrame(data,  columns = ['val1','cluster', 'val2','season']) #read your data into a dataframe
def print_mode(group):
    print("{} - {}".format(group['cluster'].values[0], group['season'].mode().values))
    
df.groupby('cluster').apply(print_mode)

您的示例数据的示例输出将是:

0 - ['lente' 'winter']
1 - ['winter']
2 - ['herfst' 'lente']
3 - ['lente']
4 - ['lente']

您可以根据自己的用例随意使用它,而不是打印它。

【讨论】:

猜你喜欢
  • 2010-09-25
  • 1970-01-01
  • 2022-12-07
  • 2021-10-09
  • 2020-03-29
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多