首页 > 解决方案 > 如果满足某些条件,将行转换为 pandas 数据框的列

问题描述

我有一个看起来像这样的熊猫数据框:

|Var1 | Var2  | Method      | Category|
|-------------------------------------|
| A   |   1   | check       | cat1    |
| A   |   1   | check       | cat2    |
| B   |   2   | check       | cat1    |
| B   |   2   | creditcard  | cat2    |

其中 Method 只能是支票或信用卡,并且 Category 也仅限于两个可能的类别。

每当给定 Var 1 和 Var 2 的“方法”相同时,我想将两个类别行组合成列,如下所示:

|Var1 | Var2  | Method    |  Cat1 | Cat2 |
|----------------------------------------|
| A   |   1   | check     |  cat1 | cat2 |
| B   |   2   | check     |  cat1 | NaN  |
| B   |   2   | creditcard|  NaN  | cat 2|

这甚至可能吗?我尝试了各种 groupby/pivoting/index 重置安排,但没有任何效果。

感谢您的任何帮助!

标签: pythonpandas

解决方案


一种使用 groupby创建join字符串的方法,那就是get_dummies问题

s=df.groupby(['Var1','Var2','Method'])['Category'].\
     apply(','.join).str.get_dummies(',')
s=s*s.columns
s.reset_index(inplace=True)
s
  Var1  Var2      Method  cat1  cat2
0    A     1       check  cat1  cat2
1    B     2       check  cat1      
2    B     2  creditcard        cat2

推荐阅读