抱歉,我无法解释标题中的问题
不小心,我们将 Pandas 数据框转向了这个:
df = pd.DataFrame(np.array([[1,1,2], [1,2,1], [2,1,2], [2,2,2],[3,1,3]]),columns=['id', '3s', 'score'])
id 3s score
1 1 2
1 2 1
2 1 2
2 2 2
3 1 3
但是我们需要将其拆开,以便 df 看起来像这样(原始版本):“3s”列“unpivots”到由 3 个带有 0 和 1 的有序列组成的离散集,这些列按顺序添加。因此,如果我们有 '3s'= 2
和 'score'= 2
,则值将是 [1,1,0]
(2 个按顺序排列 3 个)在 ['4','5','6']
列(第二组 3)中对应 id
df2 = pd.DataFrame(np.array([[1,1,1,0,1,0,0], [2,1,1,0,1,1,0], [3,1,1,1,np.nan,np.nan,np.nan] ]),columns=['id', '1', '2','3','4','5','6'])
id 1 2 3 4 5 6
1 1 1 0 1 0 0
2 1 1 0 1 1 0
3 1 1 1
非常感谢任何帮助! (请救救我)
最佳答案
用途:
n = 3
df2 = df.reindex(index = df.index.repeat(n))
new_df = (df2.assign(score = df2['score'].gt(df2.groupby(['id','3s'])
.id
.cumcount())
.astype(int),
columns = df2.groupby('id').cumcount().add(1))
.pivot_table(index = 'id',
values='score',
columns = 'columns',
fill_value = '')
.rename_axis(columns = None)
.reset_index())
print(new_df)
输出
id 1 2 3 4 5 6
0 1 1.0 1.0 0.0 1 0 0
1 2 1.0 1.0 0.0 1 1 0
2 3 1.0 1.0 1.0
如果您愿意,可以使用fill_value = 0
id 1 2 3 4 5 6
0 1 1 1 0 1 0 0
1 2 1 1 0 1 1 0
2 3 1 1 1 0 0 0
关于python - 以宽格式制作 pandas df 并将值取消连接到不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865526/