Dew*_*ani 2 python pandas dummy-variable
我有包含主题列表(主题 1-5;0 表示未分配主题)及其值的数据。我想为每个主题创建一个新列并用值填充该列。这是桌子的样子......
reviewId topic value
01 2 -4
02 2 9
03 0 -7
04 5 -1
05 1 38
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能创建一个像这样的表?
| 评论ID | 话题 | 价值 | t1 | t2 | t3 | t4 | t5 |
|---|---|---|---|---|---|---|---|
| 01 | 2 | -4 | 0 | -4 | 0 | 0 | 0 |
| 02 | 2 | 9 | 0 | 9 | 0 | 0 | 0 |
| 03 | 0 | -7 | 0 | 0 | 0 | 0 | 0 |
| 04 | 5 | -1 | 0 | 0 | 0 | 0 | -1 |
| 05 | 1 | 38 | 38 | 0 | 0 | 0 | 0 |
这里有可重复的数据可供处理。
raw_df = pd.DataFrame({
'reviewId': ['01', '02', '03', '04', '05'],
'topic': [2, 2, 0, 5, 1],
'value': ['-4', '9', '-7', '-1', '38']})
Run Code Online (Sandbox Code Playgroud)
这是与此类似问题的链接。
df.join(pd.get_dummies(df["topic"])
.reindex(columns=range(1, 5+1), fill_value=0)
.mul(df["value"], axis="rows")
.add_prefix("t"))
Run Code Online (Sandbox Code Playgroud)
并将其与原始框架连接起来,得到
reviewId topic value t1 t2 t3 t4 t5
0 01 2 -4 0 -4 0 0 0
1 02 2 9 0 9 0 0 0
2 03 0 -7 0 0 0 0 0
3 04 5 -1 0 0 0 0 -1
4 05 1 38 38 0 0 0 0
Run Code Online (Sandbox Code Playgroud)