当前位置: 首页 > 知识库问答 >
问题:

为数据框中的每一行和特定列计算列表中的出现次数

花阳辉
2023-03-14

我一直在尝试使用Python3.7中的collection.Countervalue\u counts来执行类似下面的df的操作,但没有成功。到目前为止,这是我想要得到的一个例子:

    IDs        Col2               Col3
0   123   [A, A, B, B, C]    {A:2, B:2, C:1}
1   456   [A, B, C, C]       {A:1, B:1, C:2}
2   789   [A, A, A, D, D]    {A:3, D:2}

然后,我需要为每个对应行获取Col3中的最大值,如果有平局,则只在新列中显示平局的键。大概是这样的:

    IDs        Col2               Col3            Max
0   123   [A, A, B, B, C]    {A:2, B:2, C:1}   {A:2, B:2}
1   456   [A, B, C, C]       {A:1, B:1, C:2}   {C:2}
2   789   [A, A, A, D, D]    {A:3, D:2}        {A:3}

共有1个答案

岳和泽
2023-03-14

如果值为max,则在测试中使用dict理解:

from collections import Counter

df = pd.DataFrame({'Col1':[123,456,789], 
                   'Col2':[list('AABBC'), list('ABCC'), list('AAADD')]})

df['Col3'] = df['Col2'].apply(Counter)
df['Max'] = df['Col3'].apply(lambda x: {k:v for k, v in x.items() if max(x.values()) == v})

感谢@Keyur Potdar提供的另一个想法使用最常见的

f = lambda x: {k:v for k, v in x.items() if x.most_common(1)[0][1] == v}
df['Max'] = df['Col3'].apply(f)

print (df)
   Col1             Col2                      Col3               Max
0   123  [A, A, B, B, C]  {'A': 2, 'B': 2, 'C': 1}  {'A': 2, 'B': 2}
1   456     [A, B, C, C]  {'A': 1, 'B': 1, 'C': 2}          {'C': 2}
2   789  [A, A, A, D, D]          {'A': 3, 'D': 2}          {'A': 3}

 类似资料:
  • 问题内容: 我有一个看起来像这样。 对于此数据帧中的每一行,我想计算C1,C2,C3中每一个的出现次数,并将此信息作为列附加到此数据帧中。例如,第一行具有1 C1、0 C2和0 C3。最终数据帧应如下所示 因此,我创建了一个以C1,C2和C3作为值的系列- 一种最重要的方法是在DataFrame的行和列上循环,然后在该Series上循环,并在计数器匹配时递增计数器。但是,有没有一种方法可以以紧凑的

  • 有没有办法用熊猫来计算某个值在每一列中出现的次数? 数据= pd。DataFrame({'userID':['Luis ',' Mike ',' Harvey'],' category1':[True,False,True],' category2': [True,True,False],' category3':[False,False,False]}) 假设我想计算每个类别中“真”布尔值的数量

  • 问题内容: 蟒蛇 我有一个清单清单。喜欢 我想计算每个列表在主列表中出现了多少次。 我的输出应该像 问题答案: 只需使用来自:

  • 问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连

  • 我试图计算每列CSV的总和。我能够读取csv在js使用readfile方法。我也能够循环使用它,并将数据解析成对象数组。现在我只是想出一种方法来把所有的列元素加起来,这就是我正在努力的地方。我的csv对象是对象格式的数组,看起来像这样。 CSV输入如下所示: 我想补充18 19 20最终答案应该是这样的[57,518]。 到目前为止,我已经完成了这些工作,我只需要帮助来改进这一点,并在JS中按列添

  • 问题内容: 我有一个的类,如下所示: 如你所见,包含3个元素和一个元素。我想知道Collection框架中是否有任何API可以返回出现次数,bat或者是否有其他方法可以确定出现次数。 我发现Google的Collection 确实有一个API,该API返回一个元素出现的总数。但这仅与JDK 1.5兼容。我们的产品当前在JDK 1.6中,因此我无法使用它。 问题答案: 我很确定中的静态频率方法会派上