Pandas计算数据帧内的值

时间:2017-12-24 20:54:11

标签: pandas dataframe

我有一个如下所示的数据框:

     A     B     C
1    1     8     3
2    5     4     3
3    5     8     1

我想计算这些值,以便像这样生成df:

       total
1        2
3        2
4        1
5        2
8        2

pandas可以吗?

4 个答案:

答案 0 :(得分:2)

使用np.unique -

<build>
  <directory>${project.basedir}/local/java/scratch/target</directory>
</build>

使用In [332]: df Out[332]: A B C 1 1 8 3 2 5 4 3 3 5 8 1 In [333]: ids, c = np.unique(df.values.ravel(), return_counts=1) In [334]: pd.DataFrame({'total':c}, index=ids) Out[334]: total 1 2 3 2 4 1 5 2 8 2 -

pandas-series

答案 1 :(得分:2)

您还可以使用stack()groupby()

df = pd.DataFrame({'A':[1,8,3],'B':[5,4,3],'C':[5,8,1]})
print(df)
    A   B   C
0   1   5   5
1   8   4   8
2   3   3   1

df1 = df.stack().reset_index(1)

df1.groupby(0).count()

    level_1
0   
1   2
3   2
4   1
5   2
8   2

答案 2 :(得分:1)

其他替代方案可能是使用stack,然后是value_counts,然后将结果更改为框架并最终对索引进行排序:

count_df = df.stack().value_counts().to_frame('total').sort_index()
count_df

结果:

     total
1      2
3      2
4      1
5      2
8      2

答案 3 :(得分:0)

使用np.unique(, return_counts=True)np.column_stack()

pd.DataFrame(np.column_stack(np.unique(df, return_counts=True)))

返回:

   0  1
0  1  2
1  3  2
2  4  1
3  5  2
4  8  2