Python 熊猫:解决交叉表问题
我遇到一个用户属于多个类别的情况:Python 熊猫:解决交叉表问题,python,pandas,dataframe,group-by,pivot,Python,Pandas,Dataframe,Group By,Pivot,我遇到一个用户属于多个类别的情况: UserID Category 1 A 1 B 2 A 3 A 4 C 2 C 4 A A = 1,2,3,4 B = 1 C = 2,4 我想要一个交叉表,它使用熊猫显示如下数据: A B C A 4 1 2 B 1 2 0 C 2 0 2 我尝试: df.groupby(UserID).agg(countDi
UserID Category
1 A
1 B
2 A
3 A
4 C
2 C
4 A
A = 1,2,3,4
B = 1
C = 2,4
我想要一个交叉表,它使用熊猫显示如下数据:
A B C
A 4 1 2
B 1 2 0
C 2 0 2
我尝试:
df.groupby(UserID).agg(countDistinct('Category'))
我做了上述操作,但对于不在对角线上的元素,它返回0。您可以首先从列表
a
,b
,c
创建DataFrame
。然后把它改成原来的样子。最后用途:
很高兴能帮助你!天气真好!
a = [1,2,3,4]
b = [1]
c = [2,4]
df1 = pd.DataFrame({'A':pd.Series(a), 'B':pd.Series(b), 'C':pd.Series(c)})
print (df1)
A B C
0 1 1.0 2.0
1 2 NaN 4.0
2 3 NaN NaN
3 4 NaN NaN
df2 = df1.stack()
.reset_index(drop=True, level=0)
.reset_index(name='UserID')
.rename(columns={'index':'newCat'})
print (df2)
newCat UserID
0 A 1.0
1 B 1.0
2 C 2.0
3 A 2.0
4 C 4.0
5 A 3.0
6 A 4.0
df3 = pd.merge(df, df2, on='UserID')
print (pd.crosstab(df3.newCat, df3.Category))
Category A B C
newCat
A 4 1 2
B 1 1 0
C 2 0 2