【问题标题】:Using dicts to look up values for DataFrame variables使用 dicts 查找 DataFrame 变量的值
【发布时间】:2014-05-31 20:30:30
【问题描述】:

我有一个包含 Teacher_ID 和 Student_ID 列的 pandas DataFrame。我也有每个 TDict 和 SDict 的字典,例如,给出每个老师教的年级和每个学生就读的年级,并以他们的 ID 号作为键。

我想在我的 DataFrame 中创建一个新列,引用字典中的信息。但是,当我尝试使用 TDict[Teacher_ID] + SDict[Student_ID] 之类的公式创建列时,我收到一条错误消息,告诉我“'Series' 对象是可变的,因此它们不能被散列。”

解决这个问题的批准方法是什么?我是否必须将 ID 复制到新列中,用 dict 值替换这些列中的值,然后从那里开始工作?我猜有更好的方法....

【问题讨论】:

  • 你能举一个你的代码和数据结构的例子吗?

标签: python dictionary pandas dataframe


【解决方案1】:

如果我理解正确,您可以直接拨打map

df['Teaching_grade'] = df['Teacher_ID'].map(TDict)
df['Student_grade'] = df['Student_ID'].map(SDict)

这将执行查找并将值分配给新列

【讨论】:

  • 非常感谢,是的,这确实创建了一个具有正确值的列,类似于将字典“合并”回数据集中。我希望避免这一步并直接在公式中使用 dict 值,但也许这是不可能的。
  • 这是目前的代码,读取数据并创建字典:code df=read_csv("TeachingData.csv") ts=list(df.teacher_id.drop_duplicates()) tdict = {t:random() for t in ts} sdict=dict(df.correct.groupby(df.student_id).mean()) code
  • 我不确定你是否可以,这可能是最有效的方式,因为合并将复制我认为的源数据帧,并且系列上的地图是高度优化的,因为它是使用 cython 编写的。如果您对这个答案感到满意,那么您可以投票并接受它。
  • @DavidEpstein 您可以使用一个函数并将其应用于数据框,但我不确定您是否会节省很多时间,这取决于有多少唯一 ID,一旦您创建了字典那么使用map 真的很快
  • 谢谢,埃德。地图解决方案确实有字,而且速度很快,所以我很高兴。
猜你喜欢
  • 2013-03-05
  • 1970-01-01
  • 2019-01-07
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多