为了账号安全,请及时绑定邮箱和手机立即绑定

以宽格式制作 pandas df 并将值取消连接到不同的列

以宽格式制作 pandas df 并将值取消连接到不同的列

三国纷争 2022-07-05 19:45:47
我在标题中解释问题时有点麻烦偶然地,我们将 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  score1    1   21    2   12    1   2             2    2   2                 3    1   3但是我们需要取消堆叠,所以 df 看起来像这样(原始版本): '3s' 列 'unpivots' 到由 3 个具有 0 和 1 的有序列按顺序相加的离散集。因此,如果我们有'3s'= 2相应的列(第二组 3s)中'score'= 2的值将是(按顺序排列 3 个中的 2 个)[1,1,0]['4','5','6']iddf2 = 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   61    1   1   0   1   0   02    1   1   0   1   1   0      3    1   1   1 非常感谢任何帮助! (请救救我)
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

利用:


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


查看完整回答
反对 回复 2022-07-05
?
墨色风雨

TA贡献1853条经验 获得超6个赞

这应该可以解决问题:


for gr in df.groupby('3s').groups:

    for i in range(1,4):

        df[str(i+(gr-1)*3)]=np.where((df['3s'].eq(gr))&(df['score'].ge(i)), 1,0)

df=df.drop(['3s', 'score'], axis=1).groupby('id').max().reset_index()

输出:


   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


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信