我有一个名称为(df
)的数据框:
df:
Group Name
0 A jim
1 B bob
2 C joe
3 A jane
4 C doe
以及时间表数据帧(df1
):
df1:
Group Due_Date Assignment
0 A 1-19 17:00 Quiz #1 A
1 B 1-21 16:30 Quiz #1 A
2 C 1-21 16:30 Quiz #1 A
5 A 1-24 11:30 Exam A
6 B 1-24 11:30 Exam A
7 C 1-24 12:30 Exam A
我将df1(df1_pivoted
)设置为枢轴,以将分配放在各df1
列中:
df1 = df1.pivot(index='Group',
columns='Assignment',
values='Due_Date')
df1_pivoted:
Assignment Exam A Quiz #1 A
Group
A 1-24 11:30 1-19 17:00
B 1-24 11:30 1-21 16:30
C 1-24 12:30 1-21 16:30
然后,我尝试重新添加名称,但无法弄清楚如何处理“仅对具有唯一值的索引对象有效的索引”。我认为这是因为某些名称与多个组相关联:
d=df.set_index('Group')['Name']
p='({})'.format('\\b|\\b'.join(df['Group']))
df3['Name']=df3['Group'].str.extract(p,expand=False).map(d)
导致错误:“重新索引仅对唯一值的索引对象有效”
我想要df1_final
返回的最终数据框()如下:
df1_final:
Group Name Exam A Quiz #1 A
A jim 1-24 11:30 1-19 17:00
B bob 1-24 11:30 1-21 16:30
C joe 1-24 12:30 1-21 16:30
A jane 1-24 11:30 1-19 17:00
C doe 1-24 12:30 1-21 16:30
如果有更Python化的方法可以做到这一点,那么我肯定会学习更干净的编程。感谢您的帮助。这个社区真的很棒。去年,我将编程作为一种业余爱好,目的是使工作更轻松/更有趣,而且我不知道如果没有大家和您的帮助,我是否会坚持下去。再次感谢
问题是大熊猫不知道如何处理直接分配,因为A和C的价值不止一个。改用左联接使它起作用。您的示例已损坏(缺少要重现的部分),因此可以想象df1_pivoted是您的透视df1,并且创建的df3看起来像
df3:
Group Name
A jim
B bob
C joe
A jane
C doe
然后以下应该做的工作
df3.set_index('Group', inplace=True)
df1_pivoted = df1_pivoted.join(df3, how='left')
或者,您可以重置索引,并在“组”列上进行合并以达到相同的效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句