如何在Pandas中执行基于值的数据透视表/ Groupby?

时间:2019-03-22 06:48:49

标签: python pandas pandas-groupby

我有以下数据框:

      Tran ID    Category    Quantity 
   0   001          A           5
   1   001          B           2 
   2   001          C           3
   3   002          A           4
   4   002          C           2
   5   003          D           6 

我想将其转换为:

      Tran ID       A      B      C      D       Quantity 
   0   001        True    True   True   False       10
   1   002        True    False  True   False        6
   2   003        False   False  False  True         6 

我知道我可以使用groupby来获取数量的总和,但是我不知道如何执行我描述的枢轴。

2 个答案:

答案 0 :(得分:2)

get_dummies用于带有max的指标,并通过汇总sum添加新列:

#pandas 0.23+
df1 = pd.get_dummies(df.set_index('Tran ID')['Category'], dtype=bool).max(level=0)
#oldier pandas versions
#df1 = pd.get_dummies(df.set_index('Tran ID')['Category']).astype(bool).max(level=0)
s = df.groupby('Tran ID')['Quantity'].sum()

df2 = df1.assign(Quantity = s).reset_index()
print (df2)
  Tran ID      A      B      C      D  Quantity
0     001   True   True   True  False        10
1     002   True  False   True  False         6
2     003  False  False  False   True         6

答案 1 :(得分:2)

或者您可以使用:

Input: hello

Output: char array[] = {"hello"};

Input: world

Output:

char array[] = {"hello","world"};

Input: hello

checks: array[i] == "hello"

Output: don't insert to char array

或者更容易阅读:

print(df.drop('Category',1).join(df['Category'].str.get_dummies().astype(bool)).groupby('Tran ID',as_index=False).sum())

两个输出:

df1 = df.drop('Category',1).join(df['Category'].str.get_dummies().astype(bool))
print(df1.groupby('Tran ID',as_index=False).sum())

pandas.DataFrame.groupbypandas.Series.str.get_dummies是实现此目的的方法。