计算Python中Dataframe中多数值交叉行的数量

时间:2014-02-04 13:39:04

标签: python pandas dataframe

我有一个DataFrame,如:

df = np.array([[1,5,3,4,5,5,6,],[1,2,2,3,4,5,6],[1,2,3,4,5,6,6]])         
df = pd.DataFrame(df)

我的预期输出是每行的多数值,如:

0 5                      
1 2
2 6

我是熊猫新手。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

使用pandas版本0.13.0,您可以使用df.mode(axis = 1)

(使用pd.__version__检查您的版本)

df.mode(axis=1)

   0
0  5
1  2
2  6

[3 rows x 1 columns]

答案 1 :(得分:1)

您正在寻找的概念是一种模式,它是集合中最常出现的数字。 Scipy和Pandas都有办法处理模式,通过scipy.stats.mode和pandas.DataFrame.mode(沿着轴工作)。所以对于这个例子你可以说:

df = np.array([[1,5,3,4,5,5,6,],[1,2,2,3,4,5,6],[1,2,3,4,5,6,6]])
for i in np.arange(len(df)):
    results = np.zeros(len(df))
    results[i] = scipy.stats.mode(df[i])

这应该返回一个numpy数组,其中包含每个数组的模式。要与Pandas做同样的事情,你可以这样做:

df = np.array([[1,5,3,4,5,5,6,],[1,2,2,3,4,5,6],[1,2,3,4,5,6,6]])
df = pd.DataFrame(df)
df.mode(axis = 1)

文档在这里:http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.mode.html