对于每一行,获取最频繁值的频率
for each row get frequency of the most frequent value
我有一个看起来像这样的数据框:
var1 var2 var3 var4
a a a b
c c b d
e e f g
g a a z
g a a g
w w w w
我想做的是为每一行确定最频繁的值并计算它出现的次数,在这种情况下我会得到
var1 var2 var3 var4 frq
a a a b 3
c c b d 2
e e f g 2
g a a z 2
g a a g 2
w w w w 4
我想使用 pd.get_dummies 之类的东西,但是会有太多的虚拟变量,因为每个 var1、var2 等可能会假设很多不同的值
在转置数据帧上尝试 pd.value_counts
以及 max()
函数:
df["frq"] = df.T.apply(pd.value_counts).max()
让我们试试
from scipy import stats
stats.mode(df.values.T)[1]
Out[143]: array([[3, 2, 2, 2, 2, 4]])
#df["frq"] = stats.mode(df.values.T)[1][0]
另一种方法是使用 axis=1:
df['frq'] = df.apply(lambda x: x.value_counts().iloc[0], axis=1)
或使用stack
和groupby
:
df['frq'] = df.stack().groupby(level=0).value_counts().max(level=0)
你可以在这里使用df.mode
。需要注意的一件事是 mode
查找是否存在多个值。
The mode of a set of values is the value that appears most often. It can be multiple values.
df['frq'] = df.eq(df.mode(axis=1)[0], axis=0).sum(1)
var1 var2 var3 var4 frq
0 a a a b 3
1 c c b d 2
2 e e f g 2
3 g a a z 2
4 g a a g 2
5 w w w w 4
这是一个示例。我使用 value_counts 并将其应用于所有行。我得到了所有变量的计数,然后我只选择最大值以获得您要查找的确切结果:
import pandas as pd
df = pd.DataFrame({'var1': ["a","c","e","g","g","w"],
'var2': ["a","c","e","a","a","w"],
'var3': ["a","b","f","a","a","w"],
'var4': ["b","d","g","z","g","w"]})
frequency = df.apply(pd.value_counts, axis=1).max(axis=1)
df["frq"] = frequency
print(df)
我有一个看起来像这样的数据框:
var1 var2 var3 var4
a a a b
c c b d
e e f g
g a a z
g a a g
w w w w
我想做的是为每一行确定最频繁的值并计算它出现的次数,在这种情况下我会得到
var1 var2 var3 var4 frq
a a a b 3
c c b d 2
e e f g 2
g a a z 2
g a a g 2
w w w w 4
我想使用 pd.get_dummies 之类的东西,但是会有太多的虚拟变量,因为每个 var1、var2 等可能会假设很多不同的值
在转置数据帧上尝试 pd.value_counts
以及 max()
函数:
df["frq"] = df.T.apply(pd.value_counts).max()
让我们试试
from scipy import stats
stats.mode(df.values.T)[1]
Out[143]: array([[3, 2, 2, 2, 2, 4]])
#df["frq"] = stats.mode(df.values.T)[1][0]
另一种方法是使用 axis=1:
df['frq'] = df.apply(lambda x: x.value_counts().iloc[0], axis=1)
或使用stack
和groupby
:
df['frq'] = df.stack().groupby(level=0).value_counts().max(level=0)
你可以在这里使用df.mode
。需要注意的一件事是 mode
查找是否存在多个值。
The mode of a set of values is the value that appears most often. It can be multiple values.
df['frq'] = df.eq(df.mode(axis=1)[0], axis=0).sum(1)
var1 var2 var3 var4 frq
0 a a a b 3
1 c c b d 2
2 e e f g 2
3 g a a z 2
4 g a a g 2
5 w w w w 4
这是一个示例。我使用 value_counts 并将其应用于所有行。我得到了所有变量的计数,然后我只选择最大值以获得您要查找的确切结果:
import pandas as pd
df = pd.DataFrame({'var1': ["a","c","e","g","g","w"],
'var2': ["a","c","e","a","a","w"],
'var3': ["a","b","f","a","a","w"],
'var4': ["b","d","g","z","g","w"]})
frequency = df.apply(pd.value_counts, axis=1).max(axis=1)
df["frq"] = frequency
print(df)