Python将多行转换为一行

Python将多行转换为一行,python,pandas,group-by,Python,Pandas,Group By,下面我有一个问题-我需要将多行ID转换为一行,并让不同的“输出”值成为二进制1/0的列,如示例所示 这是我的桌子 ID Output Timestamp 1 out1 1501 1 out2 1501 1 out5 1501 1 out9 1501 2 out3 1603 2 out4 1603 2 out9 1603 ID输出

下面我有一个问题-我需要将多行ID转换为一行,并让不同的“输出”值成为二进制1/0的列,如示例所示

这是我的桌子

ID Output Timestamp 1 out1 1501 1 out2 1501 1 out5 1501 1 out9 1501 2 out3 1603 2 out4 1603 2 out9 1603 ID输出时间戳 1501中的1 11501人中的1人 一五一五零一 11501人中的1人 1603年3月2日 1603年4月2日 1603年9月2日 转化为以下内容:

ID out1 out2 out3 out4 out5 out9 timestamp 1 1 1 0 0 1 1 1501 2 0 0 1 1 0 1 1603 ID out1 out2 out3 out4 out5 out9时间戳 1 1 1 0 0 1 1 1501 2 0 0 1 1 0 1 1603 有人能帮我用Python灵活地完成这项工作吗,最好是熊猫?我对这一点很陌生,已经使用SAS很多年了,所以非常感谢任何“过渡技巧”


Br,

您需要制作一个字典,其中键是id。其中的每个值都将是另一个outN to value字典

读一行。您将获得一个id、outN和一个值。首先检查您是否有该id的dict,如果没有,请创建一个dict。然后将该outN的值放入该id的dict中

第二步:您需要收集一份所有输出的列表。做一套新的。对于dict中的每个值,将其outN键添加到集合中。最后,从集合中获取一个列表,并对其进行排序

第三步:检查dict键中的每个id,然后检查新排序的outn列表中的每个outn,并打印其值,回退为零
outnval\u by\u id[id]。获取(outn,“0”)

这里有一个奇怪的例子,你有很多时间戳,你假设这些时间戳是由id复制的。小心,事实确实如此。类似的假设会导致错误。

您可以使用枢轴:

pivoted = df.pivot('ID', 'Output', 'ID')
pivoted.fillna(0, inplace=True)
pivoted[pivoted > 0] = 1
pd.merge(pivoted.reset_index(), df[['ID', 'Timestamp']].drop_duplicates(), left_on='ID', right_on='ID')
pivoted
结果:

 Output ID  out1    out2    out3    out4    out5    out9    Timestamp
 0  1   1   1   0   0   1   1   1501
 1  2   0   0   1   1   0   1   1603

你能告诉我们你试过什么吗?我一直在做下面马特斯建议的枢轴运动,但并没有一路走来!这看起来是一个简单而灵活的解决方案,我将继续努力!非常感谢您抽出时间回答!当我解决了我的问题后,我会尝试一下——上面的答案让我度过了最糟糕的时刻!谢谢你的意见!