在Python中使用三个变量在R中生成表函数
假设我们有这个样本数据在Python中使用三个变量在R中生成表函数,python,pandas,dataframe,crosstab,Python,Pandas,Dataframe,Crosstab,假设我们有这个样本数据 | mem_id | main_title | sub_title | ----------------------------------- | 1 | 1 | 1 | | 10 | 3 | 2 | | 3 | 3 | 2 | | 45 | 1 | 2 | | 162 | 2
| mem_id | main_title | sub_title |
-----------------------------------
| 1 | 1 | 1 |
| 10 | 3 | 2 |
| 3 | 3 | 2 |
| 45 | 1 | 2 |
| 162 | 2 | 2 |
...
1) 数据摘要
- mem_id:200人的唯一id
- 主标题:3个唯一标签(1,2,3)
- 子标题:6个唯一标签(1,2,3,4,5,6),每个主标题可以有一个子标题李>
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
.
.
.
我知道这只显示值(案例计数)列的正结果
我需要的是包括所有可能的主标题和子标题的组合,所以像1&1(主标题和子标题)案例必须有200行,计数列中可能有零值
如果我能得到任何帮助或建议,我将不胜感激!!
谢谢:)在熊猫中,您可以使用
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
我尝试你的R代码并没有得到你使用tableoh显示的结果,我用as.data.frame应用了该表的结果。我在帖子中添加了这个代码。谢谢你让我知道!我已经提供了熊猫版,你可以查一下。如果你不介意的话,我可以问另一个吗?在这段代码“pd.MultiIndex.from_product(list)(map(set,df.values.T))”中,map(set,df.values.T)是否将id,main,sub的每个组合都进行了转换?@jenna.h是的,它们就像R中的expand.grid,这里是product
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
.
.
.
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