【问题标题】:Finding the number of times a column has had maximum number for that particular row查找列具有该特定行的最大数量的次数
【发布时间】:2020-06-11 01:59:52
【问题描述】:

我对 Python 还是很陌生。我正在尝试为以下数据集定义一个函数。

[demo.csv]https://docs.google.com/spreadsheets/d/1wJeAKlBnP3MBTlNykYBHP8D-V0X4ClpPWdJpddaetbQ/edit?usp=sharing

假设在给定的数据列中cell 1cell 6 是不相关的。我想知道与该特定行的cell 8cell 16 列中的数据相比,cell 7 有多少次具有最大值。因此,与cell 8cell 16 相比,代码应该理想地检查cell 7 具有最大值的所有行并打印该数字。

我正在做某事,但我在中间迷失了自己。这是我的代码:

def ntimes(filename):
    data=pd.read_csv(filename, sep=',')
    cntcell7=0
    t='cell7'
    column_names = list(data.columns.values)
    max_index = data.idxmax()
    row_data = data.loc[max_index, column_names[-10:]]
    final_column_name = row_data.idxmax()
    for j in final_column_name:
        if final_column_name==t:
            cntcell7=cntcell7+1
        return (cntcell7)
ntimes("demo.csv")

让我解释一下我想做什么。每次使用idxmax() 在最后 10 列中有最大值时,我都尝试查找列名,并在所有行上进行迭代。然后计算该列名出现的次数。但是,我肯定在这里做错了。

理想情况下,对于给定的数据集,计数应返回为4

【问题讨论】:

  • 那么,您是说想要列“单元格 7”的值大于同一行中“单元格 8”到“单元格 16”列中的所有值的次数?
  • 是的。没错。

标签: python dataframe


【解决方案1】:

可能不是选择多个列的最干净的方法,但这是可行的:

import pandas as pd

df = pd.DataFrame([
    [34224, 47465,  758,    3326,   106,    142,    363,    104,    120,    121],
    [5710,  2492,   117,    153,    100,    103,    173,    100,    103,    103],
    [38737, 18950,  271,    928,    105,    118,    348,    103,    118,    127],
    [5514,  3175,   128,    184,    100,    102,    165,    100,    102,    103],
    [115285,    97418,  743,    4570,   111,    139,    670,    111,    172,    176],
    [177423,    386661, 1312,   7201,   150,    229,    888,    134,    174,    224]
])

max_in_col0 = df[0] == df.iloc[:, range(0,10)].max(axis=1)
print(max_in_col0.value_counts()[True])

当然,这也有效,但我包括了上述内容,因为您提到要选择一组特定的列:

max_in_col0 = df[0] == df.max(axis=1)
print(max_in_col0.value_counts()[True])

.iloc[:, range(0,10)] 选择第 0 到第 9 列,因此在您的数据中,您可能会选择 .iloc[:, range(6,16)]

【讨论】:

  • 请注意,数据只是您已经拥有的数据,但格式不依赖于某些外部来源 - 通常您应该在问题中执行此操作。
猜你喜欢
  • 2015-07-11
  • 2019-11-14
  • 2021-11-02
  • 2018-02-07
  • 2012-01-19
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多