我有一个如下所示的数据框:
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可以吗?
答案 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