我有一个数据框(下面有一个超级简化版),其中包含购买的产品和使用的设备的交易数据:

CUST_ID PRODUCT DEVICE
----------------------

1       A       MOBILE
1       B       TABLET
2       B       LAPTOP
2       A      MOBILE
3       C      TABLET
3       C      TABLET


我想对其进行转换,以便通过单个cust_id视图获得每种产品和设备使用的购买频率:即一个数据框(3x7)

CUST_ID PRODUCT_A   PRODUCT_B   PRODUCT_C   DEVICE_MOBILE   DEVICE_LAPTOP   DEVICE_TABLET

1   1   1   0   1   0   1
2   1   1   0   1   1   0
3   0   0   2   0   0   2


我尝试使用.pivot_table()函数,但它为我添加了索引和重复的列。这是一个简化的版本,我将需要对许多产品和设备执行此操作,所以也许函数或循环会更有效?

最佳答案

您可以使用pd.get_dummiesdf.groupby

pd.get_dummies(df, columns=['PRODUCT','DEVICE']).groupby(['CUST_ID'], as_index=False).sum()


输出:

CUST_ID  PRODUCT_A  PRODUCT_B  PRODUCT_C  DEVICE_LAPTOP  DEVICE_MOBILE  \
0       1          1          1          0              0              1
1       2          1          1          0              1              1
2       3          0          0          2              0              0

   DEVICE_TABLET
0              1
1              0
2              2

关于python - Python Pandas-聚合和计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52854826/

10-12 19:49