Python 使用pandas对成对类别进行计数,以从整洁格式的数据帧返回数据透视图
我有一个数据框,如附加的屏幕截图: 要创建数据帧,请使用以下代码段:Python 使用pandas对成对类别进行计数,以从整洁格式的数据帧返回数据透视图,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,如附加的屏幕截图: 要创建数据帧,请使用以下代码段: import pandas as pd buyer_id=['aaa', 'bbb', 'aac', 'aaa', 'bbb'] category=['mobile', 'laptop', 'laptop', 'grocery', 'mobile'] data_tuples = list(zip(buyer_id,category)) df=pd.DataFrame(data_tuples, columns=['Bu
import pandas as pd
buyer_id=['aaa',
'bbb',
'aac',
'aaa',
'bbb']
category=['mobile',
'laptop',
'laptop',
'grocery',
'mobile']
data_tuples = list(zip(buyer_id,category))
df=pd.DataFrame(data_tuples, columns=['Buyer_ID','Category'])
我想创建一个新的数据框,它看起来像屏幕截图中所需的输出。
基本上计算成对的买家id,比如手机和手机应返回2,手机和杂货店应返回1,杂货店和笔记本电脑应返回0等
尝试使用groupby、pivot等,但不起作用。仅返回同一类别的值,即移动和移动
一种方法可能是采用pd.get_dummies()并在一个go-on buyer_id级别对两列进行求和,并对求和等于2的行进行计数,这在Pandas中是否有更简单的方法?使用,索引和列名称的最后更改顺序为,删除索引和列名称为:
与一起使用,索引和列名的最后更改顺序为,删除索引和列名的方法为:
i = df['Category'].unique()
df1 = df.merge(df, on='Buyer_ID')
df = (pd.crosstab(df1['Category_x'],df1['Category_y'])
.reindex(index=i, columns=i)
.rename_axis(index=None, columns=None))
print (df)
mobile laptop grocery
mobile 2 1 1
laptop 1 2 0
grocery 1 0 1