我试图比较一个数据帧(500000x3)行中的三个浮点值,我希望这三个值是相同的,或者至少是其中的两个。我想在假设它们并非完全不同的情况下选择出现最多的值。我目前尝试的玩具示例如下所示:
mydf
a b c
0 1 1 2
1 3 3 3
2 1 3 3
3 4 5 4
3 4 5 5
mydft = mydf.transpose()
counts=[]
for col in mydft:
counts.append(mydft[col].value_counts())
然后我考虑循环计数,并为每个计数选择最高值,但这非常缓慢,而且感觉不舒服。我也试过:
truth = mydf['a'] == mydf['b']
为了保持计算结果为真的行,并对那些不为真的行做一些处理,但我在真实的行中有1000个NaN值,显然NaN==NaN
是False
。有什么建议吗?
这是我从@coldspeed中学到的一个快速方法
dummies = pd.get_dummies(df.astype(str)).groupby(by=lambda x: x.split('_')[1], axis=1).sum()
df['new'] = dummies.idxmax(1)
a b c new
0 1 1 2 1
1 3 3 3 3
2 1 3 3 3
3 4 5 4 4
3 4 5 5 5
说明:
我们可以使用pd.get\u dummies
对每列中的项目进行一次热编码,因为get\u dummies不会接受数字,所以我们必须将它们转换为字符串。
pd.get_dummies(df.astype(str))
a_1 a_3 a_4 b_1 b_3 b_5 c_2 c_3 c_4 c_5
0 1 0 0 1 0 0 1 0 0 0
1 0 1 0 0 1 0 0 1 0 0
2 1 0 0 0 1 0 0 1 0 0
3 0 0 1 0 0 1 0 0 1 0
3 0 0 1 0 0 1 0 0 0 1
现在,如果你只将列中的数字分组并求和,我们可以得到每行的值计数。也就是说
1 2 3 4 5
0 2 1 0 0 0
1 0 0 3 0 0
2 1 0 2 0 0
3 0 0 0 2 1
3 0 0 0 1 2
在一个热编码上使用idxmax(axis=1)
将获得列名,这是行中所需的最大重复数。
0 1
1 3
2 3
3 4
3 5
dtype: object
编辑:
如果数据帧中有字符串,则选择速度比任何东西都快的get_dummies
,如果有数字,则必须选择scipy模式
或pandas模式
我们可以用模式
...
from scipy import stats
value,count=stats.mode(df.values,axis=1)
value
Out[180]:
array([[1],
[3],
[3],
[4],
[5]], dtype=int64)
count
Out[181]:
array([[2],
[3],
[2],
[2],
[2]])
分配回来后
df['new']=value
df
Out[183]:
a b c new
0 1 1 2 1
1 3 3 3 3
2 1 3 3 3
3 4 5 4 4
3 4 5 5 5
我有一个熊猫数据框,如下所示: 我如何将每分钟的数据分组,并计算每分钟每个状态的数量,以获得此数据帧:
我有一个数据集 我希望能够返回像(显示独特的值和频率)这样的东西
然后,我会添加初始值,然后查看这个数据,从前面的行计算新行,例如左右。 我目前使用的代码如下所示,但我觉得它有点难看,必须有一种方法直接使用DataFrame来实现这一点,或者只是一种更好的方法。注意:我使用的是Python2.7。
我从熊猫数据帧文档开始:数据结构简介 我想在一个时间序列类型的计算中迭代地填充数据帧。所以基本上,我想用列A、B和时间戳行初始化数据帧,全0或全NaN。 然后,我会添加初始值并检查这些数据,根据之前的行计算新行,比如说< code > row[A][t]= row[A][t-1]1 左右。 我目前正在使用下面的代码,但我觉得它有点难看,必须有一种方法直接用数据帧来做这件事,或者一般来说是一种更好的
下面有一段代码,它创建了数据框中每列中缺失值的汇总表。我希望我可以构建一个类似的表来计算唯一的值,但是DataFrame没有唯一的()方法,只有每一列是独立的。 (资料来源:https://stackoverflow.com/a/39734251/7044473) 如何为唯一值实现相同的功能?
问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连