Python 如何计算每个值在数据帧中出现的频率?

Python 如何计算每个值在数据帧中出现的频率?,python,pandas,dataframe,Python,Pandas,Dataframe,我有数据框: Values Bought 0 0,1,2,3,4,5 0 1 9,10,11,9,11,12,9,11 9,12,11 2 5, 1, 1, 10, 0 0 第一个问题: 我需要计算每个“值”列在此数据框中出现的次数。

我有数据框:

    Values                                      Bought
0   0,1,2,3,4,5                                 0
1   9,10,11,9,11,12,9,11                        9,12,11
2   5, 1, 1, 10, 0                              0
第一个问题: 我需要计算每个“值”列在此数据框中出现的次数。
例如:

 0 : 1
 1 : 1
 2 : 1
 3 : 1
 4 : 1
 5 : 1
 9 : 3
10 : 1
11 : 3
12 : 1
 0 : 2
 1 : 3
 2 : 1
 3 : 1
 4 : 1
 5 : 2

 9 : 3
10 : 2
11 : 3
12 : 1

 5 : 1
 1 : 2
10 : 1
 0 : 1
第二个问题: 我需要计算“值”列中每行的每个数字在此行中出现的次数。
例如:

 0 : 1
 1 : 1
 2 : 1
 3 : 1
 4 : 1
 5 : 1
 9 : 3
10 : 1
11 : 3
12 : 1
 0 : 2
 1 : 3
 2 : 1
 3 : 1
 4 : 1
 5 : 2

 9 : 3
10 : 2
11 : 3
12 : 1

 5 : 1
 1 : 2
10 : 1
 0 : 1

我该怎么做呢?

假设您的
值列包含字符串:

In [163]: df
Out[163]:
                 Values   Bought
0           0,1,2,3,4,5        0
1  9,10,11,9,11,12,9,11  9,12,11
2        5, 1, 1, 10, 0        0

In [164]: df.dtypes
Out[164]:
Values    object
Bought    object
dtype: object

In [165]: df.Values.str.split(',\s*', expand=True).stack().value_counts()
Out[165]:
11    3
1     3
9     3
5     2
0     2
10    2
12    1
4     1
3     1
2     1
dtype: int64

In [166]: df.Values.str.split(',\s*', expand=True).apply(lambda x: x.value_counts(), axis=1).fillna(0).astype(int)
Out[166]:
   0  1  10  11  12  2  3  4  5  9
0  1  1   0   0   0  1  1  1  1  0
1  0  0   1   3   1  0  0  0  0  3
2  1  2   1   0   0  0  0  0  1  0

假设您的
列包含数字列表:

In [193]: df
Out[193]:
                          Values
0             [0, 1, 2, 3, 4, 5]
1  [9, 10, 11, 9, 11, 12, 9, 11]
2               [5, 1, 1, 10, 0]

In [194]: df.Values.apply(pd.Series).stack().value_counts().sort_index()
Out[194]:
0.0     2
1.0     3
2.0     1
3.0     1
4.0     1
5.0     2
9.0     3
10.0    2
11.0    3
12.0    1
dtype: int64

In [195]: df.Values.apply(pd.Series).apply(lambda x: x.value_counts(), axis=1).fillna(0).astype(int)
Out[195]:
   0.0   1.0   2.0   3.0   4.0   5.0   9.0   10.0  11.0  12.0
0     1     1     1     1     1     1     0     0     0     0
1     0     0     0     0     0     0     3     1     3     1
2     1     2     0     0     0     1     0     1     0     0

您的
值是什么?它们是像
'0,1,2,3,4,5'这样的字符串还是像
[0,1,2,3,4,5]
这样的数字列表?