我该如何处理 "Reindexing only valid with uniquely valued Index objects"
How can I handle "Reindexing only valid with uniquely valued Index objects"
我有一个名字数据框(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
如果有更多 Pythonic 的方法来解决这个问题,我绝对愿意学习更简洁的编程。谢谢您的帮助。这个社区真的很棒。在过去的一年里,我刚开始将编程作为一种爱好,让工作 easier/more 变得有趣,我不知道如果没有你们所有人和你们的帮助,我是否会坚持下去。再次感谢
问题是 pandas 不知道如何处理直接赋值,因为 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')
或者,您可以重置索引,并在组列上进行合并以获得相同的效果。
我有一个名字数据框(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
如果有更多 Pythonic 的方法来解决这个问题,我绝对愿意学习更简洁的编程。谢谢您的帮助。这个社区真的很棒。在过去的一年里,我刚开始将编程作为一种爱好,让工作 easier/more 变得有趣,我不知道如果没有你们所有人和你们的帮助,我是否会坚持下去。再次感谢
问题是 pandas 不知道如何处理直接赋值,因为 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')
或者,您可以重置索引,并在组列上进行合并以获得相同的效果。