【问题标题】:pandas gets the most dominant value in the columnpandas 获得列中最主要的值
【发布时间】:2018-02-17 06:11:08
【问题描述】:

我正在尝试获取列的最显着/最频繁的值,所以我尝试了以下代码,

df['currency'].value_counts(normalize=True)

这给了我,例如

USD    0.800000
CAD    0.100000
EUR    0.050000
GBP    0.050000

现在边缘情况就像

USD    0.500000
CAD    0.500000

USD    0.333333
CAD    0.333333
CNY    0.333333

USD    0.400000
CAD    0.400000
CNY    0.100000
EUR    0.100000

以此类推,频率在所有值或部分值之间是偶数。

现在我正在尝试检测这种边缘情况,那么最好的方法是什么?

换句话说,我试图找到系列/列中某个值的最主要频率,因为df['currency'].value_counts().max() 不一定给出最高频率,因为df['currency'].value_counts() 给出的值都可能是相同的。因此data.df['currency'].value_counts().idxmax() 不一定会给出列中频率最高的索引/列值。

【问题讨论】:

  • 你需要s = df[col].value_counts(); s[s==s.max()]?
  • 你考虑过使用Series.mode()方法吗?

标签: python-3.x pandas dataframe series


【解决方案1】:

演示:

In [104]: df
Out[104]:
  currency
0      USD
1      USD
2      EUR
3      EUR
4      CAD

In [105]: df.currency.mode()
Out[105]:
0    EUR
1    USD
dtype: object

In [106]: len(df.currency.mode()) > 1
Out[106]: True

现在让我们“修复”我们的 DF - 通过添加另一行 USD 货币,因此不再有“边缘”情况:

In [107]: df.loc[len(df)] = ['USD']

In [108]: df
Out[108]:
  currency
0      USD
1      USD
2      EUR
3      EUR
4      CAD
5      USD

In [109]: len(df.currency.mode()) > 1
Out[109]: False

In [110]: df.currency.mode()
Out[110]:
0    USD
dtype: object

【讨论】:

  • df.loc[len(df)] = ['USD'] 给了我ValueError: cannot set a row with mismatched columns
  • @daiyue,这只是一个演示——你不应该在你的 DF 中添加行......我只是想在没有“边缘”情况时显示 df.currency.mode() 的不同输出。 ..
猜你喜欢
  • 2020-09-08
  • 2022-12-12
  • 2017-11-07
  • 2022-08-18
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多