在按条件应用分组后,我想取消对数据框的分组。 我用pandas group by&sum来分组。以下是表格分组
+------------+--------------+----------------+-----------------+
| Month | Amt_8_red_17 | Amt_8_black_29 | Amt_10_black_29 |
+------------+--------------+----------------+-----------------+
| 01-01-2018 | 0 | 12 | 18 |
| 01-02-2018 | 100 | 12 | 12 |
+------------+--------------+----------------+-----------------+
现在我要取消数据分组。列名称是由下划线连接的列的组合。 例如:Amt_8_red_17:列名是(Amount,Count,Color,Id) 输出看起来像
+------------+---------+-------+-------+----+
| Month | Amount | Count | Color | Id |
+------------+---------+-------+-------+----+
| 01-01-2018 | 0 | 8 | red | 17 |
| 01-01-2018 | 12 | 8 | black | 29 |
| 01-01-2018 | 18 | 10 | black | 29 |
| 01-02-2018 | 100 | 8 | red | 17 |
| 01-02-2018 | 12 | 8 | black | 29 |
| 01-02-2018 | 12 | 10 | black | 29 |
+------------+---------+-------+-------+----+
有没有更快的方法?
答案 0 :(得分:3)
如有必要,首先按DataFrame.set_index
的所有列创建索引,不包括base64
。
然后通过str.split
创建_
并通过DataFrame.unstack
重塑形状。
最后一次数据清理-首先删除DataFrame.reset_index
的第一级,第二删除MultiIndex
中的列。最后设置新的列名称。
MultiIndex
最后必要时更改订单列:
df = df.set_index('Month')
df.columns = df.columns.str.split('_', expand=True)
df = df.unstack().reset_index(level=0, drop=True).reset_index()
df.columns= ['Count','Color','Id','Month','Amount']
print (df)
Count Color Id Month Amount
0 8 red 17 01-01-2018 0
1 8 red 17 01-02-2018 100
2 8 black 29 01-01-2018 12
3 8 black 29 01-02-2018 12
4 10 black 29 01-01-2018 18
5 10 black 29 01-02-2018 12