python正在重塑数据帧
我有一个包含两列的数据框:python正在重塑数据帧,python,pandas,Python,Pandas,我有一个包含两列的数据框:id1和id2 df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [12,13,12,11,13,13]}) print(df) id1 id2 A 123 B 13 C 12 B 11 A 13 C 132 我想对其进行重塑(可能使用、groupby或pivot?)以获得以下信息: id1 id2-1 id2-2 A
id1
和id2
df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [12,13,12,11,13,13]})
print(df)
id1 id2
A 123
B 13
C 12
B 11
A 13
C 132
我想对其进行重塑(可能使用、groupby或pivot?)以获得以下信息:
id1 id2-1 id2-2
A 123 13
B 13 11
C 12 132
请注意,每个id1
正好有两行,但是id2
有大量不同的值(因此我不想做一个热向量编码)
如果输出可以按字典顺序排序,则有一个首选项,即:
id1 id2-1 id2-2
A 13 123
B 11 13
C 12 132
i、 e.对于每一行,id2-1
和id2-2
中的值被排序(参见与id1==“B”
相对应的行)。这应该做到:
import pandas as pd
df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [123,13,12,11,13,132]})
df['id2'] = df['id2'].astype(str)
df = df.groupby(['id1']).agg(lambda x: '-'.join(x))
df['id2-1'] = df['id2'].apply(lambda x: x.split('-')[0]).astype(int)
df['id2-2'] = df['id2'].apply(lambda x: x.split('-')[1]).astype(int)
df = df.reset_index()[['id1', 'id2-1', 'id2-2']]
这应该做到:
import pandas as pd
df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [123,13,12,11,13,132]})
df['id2'] = df['id2'].astype(str)
df = df.groupby(['id1']).agg(lambda x: '-'.join(x))
df['id2-1'] = df['id2'].apply(lambda x: x.split('-')[0]).astype(int)
df['id2-2'] = df['id2'].apply(lambda x: x.split('-')[1]).astype(int)
df = df.reset_index()[['id1', 'id2-1', 'id2-2']]
计划
- 我们希望创建一个索引,以便每次连续看到
中的值。为此,我们将'id1'
然后使用groupby('id1')
为我们提供新的索引cumcount()
- 然后,我们将索引设置为a
pd。使用
set\u index
- 使用
我们设置为pd.MultiIndex
取消堆栈
- 最后,我们使用一些复杂的映射重命名这些列
计划
- 我们希望创建一个索引,以便每次连续看到
中的值。为此,我们将'id1'
然后使用groupby('id1')
为我们提供新的索引cumcount()
- 然后,我们将索引设置为a
pd。使用
set\u index
- 使用
我们设置为pd.MultiIndex
取消堆栈
- 最后,我们使用一些复杂的映射重命名这些列
我有一个小问题,因为我过度简化了我的样本。我的
id1
中充满了数字,因此groupby.sum()
没有按计划运行。我已经更新了我的示例。请参见编辑:)遗憾的是,它只适用于2位数字是的,我再次编辑,我的id2
数字的位数并不都相同(尽管,我认为通过简单的apply
)可以更正。让我们再试一次,这应该不会失败:)事实上,既然数据中没有,为什么要用-
拆分?我有一个小问题,因为我过度简化了我的示例。我的id1
中充满了数字,因此groupby.sum()
没有按计划运行。我已经更新了我的示例。请参见编辑:)遗憾的是,它只适用于2位数字是的,我再次编辑,我的id2
数字的位数并不都相同(尽管,我认为通过简单的apply
)可以更正。让我们再试一次,这应该不会失败:)事实上,既然数据中没有,为什么要用-
拆分呢?这也是注释中的答案,供将来参考:)@A-Za-zkind@A-扎阿门。我同意。这是一个很好的回答。谢谢。您是否有办法对列中的值逐行排序?(比申请要快,不是吗?@ysearka我不知道你到底想怎么分类。然而,不管你在想什么,我相信有一种比使用apply
更快的方法来做。这是一种答案,会在笔记中出现,供将来参考:)@a-Za-zkind@A-扎阿门。我同意。这是一个很好的回答。谢谢。您是否有办法对列中的值逐行排序?(比申请要快,不是吗?@ysearka我不知道你到底想怎么分类。但是,无论您在想什么,我相信有一种比使用apply
更快的方法。