为每个不同的值创建新列,包括Python / Pandas中相应值的外观总和

时间:2018-04-18 12:54:10

标签: python pandas

我有这样的数据框:

import pandas as pd
data = {
    'POS': ['1','2','1','3','4'],
    'TYPE': ['A','A','A','B','C'],
    'VOLUME': [34,2,12,200,1],

}
df = pd.DataFrame(data)
df

表:

    POS TYPE VOLUME
0   1   A    34
1   2   A    2
2   1   A    12
3   3   B    200
4   4   C    1

任务:

我想为列TYPE中的每个不同值自动创建新列,并获取按POS分组的每个值的出现次数(假设有很多不同的值,不仅仅是A,B和C)。另外,我只想总结VOLUME

结果应如下所示:

|--------------|--------------|--------------|--------------|--------------|
|      POS     |   Amount_A   |   Amount_B   |   Amount_C   |  Sum_Volume  |
|--------------|--------------|--------------|--------------|--------------|
|       1      |      2       |      0       |       0      |     46       |
|       2      |      1       |      0       |       0      |     2        |
|       3      |      0       |      1       |       0      |     200      |
|       4      |      0       |      0       |       1      |     1        |
|--------------|--------------|--------------|--------------|--------------|

尝试:

我知道如何为VOLUMEdf.groupby(['POS'])['VOLUME'].sum()执行此操作。但是我不知道如何管理新的专栏没有#34;如果TYPE ==' A'然后......"。

1 个答案:

答案 0 :(得分:2)

试试这个:

import pandas as pd
data = {
'POS': ['1','2','1','3','4'],
'TYPE': ['A','A','A','B','C'],
'VOLUME': [34,2,12,200,1],

}
df = pd.DataFrame(data)
df = pd.concat([df,pd.get_dummies(df["TYPE"])],axis=1)
print(df.groupby("POS").sum())

输出:

      VOLUME  A  B  C
POS                 
1        46  2  0  0
2         2  1  0  0
3       200  0  1  0
4         1  0  0  1