假设我们有此示例数据。
| mem_id | main_title | sub_title |
-----------------------------------
| 1 | 1 | 1 |
| 10 | 3 | 2 |
| 3 | 3 | 2 |
| 45 | 1 | 2 |
| 162 | 2 | 2 |
...
1)数据摘要
可能像一个mem_id一样重复,可以有(1:main,1:sub)的多种情况
2)问题
我想让R表函数在python中产生结果。
R表函数的结果是这样的。 我可以从main_title和sub_title中进行所有可能的组合。 也可以通过mem_id从每种情况下获得计数。
count.data <- table(data$mem_id, data$main_title, data$sub_title)
count.table <- as.data.frame(count.data)
===============================================
mem_id main_title sub_title value
1 1 1 1 0
2 2 1 1 0
3 3 1 1 0
4 4 1 1 0
5 5 1 1 0
6 6 1 1 0
7 7 1 1 0
.
.
.
我试图在Python中获得此结果,下面的结果是我到目前为止所获得的。
cross_table1 = pd.melt(data, id_vars=['main_title ', 'sub_title'], value_vars='mem_id', value_name='mem_id')
==================================================
main_title sub_title variable mem_id
1 1 1 mem_id 10
2 1 1 mem_id 10
3 3 1 mem_id 10
4 4 2 mem_id 10
5 1 4 mem_id 132
6 4 1 mem_id 65
7 4 3 mem_id 88
.
.
.
cross_table2 = cross_table1.pivot_table(index=['main_title ', 'sub_title', 'mem_id'], values='variable', aggfunc='count')
cross_table32.reset_index().sort_values('value')
==============================================
main_title sub_title mem_id value
1 1 1 1 4
2 1 1 2 3
3 3 1 3 1
4 4 2 3 10
5 1 4 3 2
6 1 1 4 5
7 3 2 5 2
.
.
.
我认识到这仅显示了value(案例数)列的积极结果。
我需要的是包括main_title和sub_title的所有可能的组合,因此像1&1(main&sub)的情况下必须有200行,并且count列中可能有零值。
如果能得到任何帮助或建议,将非常感谢!! 谢谢:)
答案 0 :(得分:0)
在熊猫中,您可以使用groupby
+ reindex
s=df.groupby(df.columns.tolist()).size()
idx=pd.MultiIndex.from_product(list(map(set,df.values.T)))
s=s.reindex(idx,fill_value=0)
s
Out[15]:
162 1 1 0
2 0
2 1 0
2 1
3 1 0
2 0
1 1 1 1
2 0
2 1 0
2 0
3 1 0
2 0
10 1 1 0
2 0
2 1 0
2 0
3 1 0
2 1
3 1 1 0
2 0
2 1 0
2 0
3 1 0
2 1
45 1 1 0
2 1
2 1 0
2 0
3 1 0
2 0
dtype: int64