我有以下数据框:
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
来获取数量的总和,但是我不知道如何执行我描述的枢轴。
答案 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.groupby
和pandas.Series.str.get_dummies
是实现此目的的方法。