需要帮助获取数据帧中每个数字的频率吗

2024-06-28 19:44:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到一种简单的方法将一个数据帧转换成另一个具有每个特征频率的数据帧。下面我将提供一个我正在尝试做的示例

当前数据帧示例(此处要素标签仅为索引值):

   0   1   2   3   4   ...   n
0  2   3   1   4   2         ~
1  4   3   4   3   2         ~
2  2   3   2   3   2         ~
3  1   3   0   3   2         ~
...
m  ~   ~   ~   ~   ~         ~

Dataframe我想将其转换为:

   0   1   2   3   4   ...   n
0  0   1   2   1   1         ~
1  0   0   1   2   2         ~
2  0   0   3   2   0         ~
3  1   1   1   2   0         ~
...
m  ~   ~   ~   ~   ~         ~

正如您所看到的,列标签对应于数据帧中可能的数字,并且该数字每行的每个频率都被放入所讨论行的特定功能中。有没有一种简单的方法可以用python实现这一点?我有一个大的数据帧,我正试图将其转换为一个频率数据帧,用于特征选择

如果需要更多信息,我会更新我的帖子


Tags: 数据方法功能信息示例dataframe数字标签
2条回答

pd.value_countsapply一起使用:

df.apply(pd.value_counts, axis=1).fillna(0)

     0    1    2    3    4
0  0.0  1.0  2.0  1.0  1.0
1  0.0  0.0  1.0  2.0  2.0
2  0.0  0.0  3.0  2.0  0.0
3  1.0  1.0  1.0  2.0  0.0

备选方案^{}^{}

df2 = df.T.melt()
pd.crosstab(df2['variable'], df2['value'])

Numpy

这个值就是速度。但显然更复杂

n, k = df.shape
i = df.index.to_numpy().repeat(k)
j = np.ravel(df)
m = j.max() + 1

a = np.zeros((n, m), int)

np.add.at(a, (i, j), 1)

pd.DataFrame(a, df.index, range(m))

   0  1  2  3  4
0  0  1  2  1  1
1  0  0  1  2  2
2  0  0  3  2  0
3  1  1  1  2  0

这将生成一个索引i,该索引将对应于我分配给jdf中的值。我将使用这些索引在由ij中的索引指定的数组a的位置添加一个索引

相关问题 更多 >