我想要的是:
visit_id atc_1 atc_2 atc_3 atc_4 atc_5 atc_6 atc_7
48944282 A02AG J01CA04 J095AX02 N02BE01 R05X NaN NaN
48944305 A02AG A03AX13 N02BE01 R05X NaN NaN NaN
我不知道有多少atc_1 ... atc_7 ...?atc_100列需要提前。我只需要将所有关联的atc_codes
与每个visit_id
收集到一行。
这似乎是group_by
然后是pivot
,但我已多次尝试但失败了。我还尝试使用pandas'自行加入一个SQL。 merge
()但这也不起作用。
最终结果是,我会将atc_1
,atc_7
,... atc_100
粘贴在一起形成一个长atc_code
。此合约atc_code
将是我的" Y
"或"标签"我试图预测的数据集列。
谢谢!
答案 0 :(得分:2)
首先使用cumcount
来计算按功能pivot
创建列的每个组的计数值。然后使用reindex_axis
添加缺少的列,并按add_prefix
更改列名称。最后reset_index
:
g = df.groupby('visit_id').cumcount() + 1
print (g)
0 1
1 2
2 3
3 4
4 5
5 1
6 2
7 3
8 4
dtype: int64
df = pd.pivot(index=df['visit_id'], columns=g, values=df['atc_code'])
.reindex_axis(range(1, 8), 1)
.add_prefix('atc_')
.reset_index()
print (df)
visit_id atc_1 atc_2 atc_3 atc_4 atc_5 atc_6 atc_7
0 48944282 A02AG J01CA04 J095AX02 N02BE01 R05X NaN NaN
1 48944305 A02AG A03AX13 N02BE01 R05X None NaN NaN