我有一个pandas.DataFrame
看起来像这样。
COL1 COL2 COL3
C1 None None
C1 C2 None
C1 C1 None
C1 C2 C3
对于此数据帧中的每一行,我想计算C1,C2,C3中每一个的出现次数,并将此信息作为列附加到此数据帧中。例如,第一行具有1 C1、0 C2和0
C3。最终数据帧应如下所示
COL1 COL2 COL3 C1 C2 C3
C1 None None 1 0 0
C1 C2 None 1 1 0
C1 C1 None 2 0 0
C1 C2 C3 1 1 1
因此,我创建了一个以C1,C2和C3作为值的系列-
一种最重要的方法是在DataFrame的行和列上循环,然后在该Series上循环,并在计数器匹配时递增计数器。但是,有没有一种apply
方法可以以紧凑的方式实现这一目标呢?
您可以申请value_counts
:
In [11]: df.apply(pd.Series.value_counts, axis=1)
Out[11]:
C1 C2 C3 None
0 1 NaN NaN 2
1 1 1 NaN 1
2 2 NaN NaN 1
3 1 1 1 NaN
因此,您可以仅填写所需的基本值来填充NaN和小程序:
In [12]: df.apply(pd.Series.value_counts, axis=1)[['C1', 'C2', 'C3']].fillna(0)
Out[12]:
C1 C2 C3
0 1 0 0
1 1 1 0
2 2 0 0
3 1 1 1
注意:直接为DataFrame提供value_counts方法是一个未解决的问题(我认为应该由熊猫0.15引入)。
问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连
而是如何高效地计算300列。请救命!
问题内容: 我有一个数组如下 预期结果 尝试如下 问题答案: 无需使用jQuery即可完成此任务-此示例将构建一个对象,其中包含数组中每个不同元素的出现次数
有没有办法用熊猫来计算某个值在每一列中出现的次数? 数据= pd。DataFrame({'userID':['Luis ',' Mike ',' Harvey'],' category1':[True,False,True],' category2': [True,True,False],' category3':[False,False,False]}) 假设我想计算每个类别中“真”布尔值的数量
我正在尝试获取每分钟出现数据的次数。日期看起来是这样的。第一个数字是一个整数,表示自Unix纪元以来的秒数,我将其转换为ISO 8601时间。第二个数字是双精度的。以“00”结尾的时间代表第0分钟,以“60”结尾的时间代表第1分钟。 代码: 我的输出是这样的: 但我正在寻找类似下面的东西(忽略新的分钟找到的文本) 我如何调整它,以便我跟踪当前分钟并添加到计数器,而不会过早地打印出计数器?
我一直在尝试使用Python3.7中的或来执行类似下面的df的操作,但没有成功。到目前为止,这是我想要得到的一个例子: 然后,我需要为每个对应行获取中的最大值,如果有平局,则只在新列中显示平局的键。大概是这样的: