如何在pandas中的聚合函数中创建并查找列的频率

如何在pandas中的聚合函数中创建并查找列的频率,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个dataframe,我想做一个groupby两列,然后创建一个字典,它的值和频率作为聚合函数。这就是我的数据看起来的样子 A, B, C ------- 1, 2, V 1, 2, V 1, 2, B 1, 3, V 1, 3, B 1, 3, B 我想按A和B分组,并创建一个显示C列频率的词典。这是我的最终数据帧的外观: A, B, C ------- 1, 2, {V:2, B:1} 1, 3, {V:1, B:2} 我该怎么做呢?使用groupby+值\u计数+进行记录 df=

我有一个dataframe,我想做一个groupby两列,然后创建一个字典,它的值和频率作为聚合函数。这就是我的数据看起来的样子

A, B, C
-------
1, 2, V
1, 2, V
1, 2, B
1, 3, V
1, 3, B
1, 3, B
我想按
A
B
分组,并创建一个显示
C
列频率的词典。这是我的最终数据帧的外观:

A, B, C
-------
1, 2, {V:2, B:1}
1, 3, {V:1, B:2}

我该怎么做呢?

使用
groupby
+
值\u计数
+
进行记录

df=df.groupby(['A','B']).C.apply(lambda x : [x.value_counts().to_dict()]).str[0].reset_index()
df
Out[73]: 
   A  B                 C
0  1  2  {'V': 2, 'B': 1}
1  1  3  {'B': 2, 'V': 1}

df.C.str.len()
Out[75]: 
0    2
1    2
Name: C, dtype: int64

使用
groupby
+
值\u计数
+
进行记录

df=df.groupby(['A','B']).C.apply(lambda x : [x.value_counts().to_dict()]).str[0].reset_index()
df
Out[73]: 
   A  B                 C
0  1  2  {'V': 2, 'B': 1}
1  1  3  {'B': 2, 'V': 1}

df.C.str.len()
Out[75]: 
0    2
1    2
Name: C, dtype: int64

to_json更简单我想@W-B(lambda x:x.value_counts().to_json()).reset_index()@W-B:我怎样才能添加另一个字典大小的列?@H.Z.你认为dict的大小是指长度吗?@W-B:我可以知道str[0]在这里做什么吗?@H.Z.因为熊猫会自动将dict转换为熊猫数据帧类型,所以我们需要把我们创建的所有dict放到列表中来“保护”它,然后你的dict在列表中,我们做str[0],选择列表的第一项得到dict/to_json更简单我想@W-B(lambda x:x.value_counts().to_json())。reset_index()@W-B:我如何添加另一个字典大小的列?@H.Z.你认为dict的大小是多少,你是说长度吗?@W-b:我可以知道str[0]在这里做什么吗?@H.Z.因为pandas会自动将dict转换为pandas数据帧类型,所以我们需要将我们创建的所有dict都列在列表中以“保护”它,然后你的dict在列表中,我们执行str[0],选择列表的第一项获取dict/