【问题标题】:How can I handle "Reindexing only valid with uniquely valued Index objects"如何处理“仅对唯一值索引对象有效的重新索引”
【发布时间】:2021-04-22 07:55:17
【问题描述】:

我有一个名称数据框 (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 的方法来解决这个问题,我绝对愿意学习更简洁的编程。谢谢您的帮助。这个社区真的很棒。在过去的一年里,我将编程作为一种爱好,让工作更轻松/更有趣,我不知道如果没有你们所有人以及你们愿意提供帮助,我是否会坚持下去。再次感谢

【问题讨论】:

  • 这发生在我身上,因为我有 2 列同名。

标签: python pandas dataframe unique reindex


【解决方案1】:

问题在于 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')

或者,您可以重置索引,并对 Group 列进行合并以获得相同的效果。

【讨论】:

  • 再次感谢。我花了我 2-3 天的时间试图弄清楚事情,而其他人则需要几分钟。仍然享受旅程。感谢您的帮助。
  • 没问题!这是它的方式。旅行愉快。仅供参考,有很多方法可以解决同样的问题。例如,您还可以重新索引 df1_pivoted 以获得 df3 的大小,然后添加名称,或者您可以添加名称然后旋转。尝试不同的解决方案会学到很多东西。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2022-07-15
  • 2021-07-22
  • 2021-05-22
  • 2018-10-27
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多