【问题标题】:How to merge values from one serie to another如何将值从一个系列合并到另一个系列
【发布时间】:2020-09-15 00:30:07
【问题描述】:

我有两个系列,第一个是

Date     Item
2012  Cheeseburger
      Pasta
      Rice
2013  Tomatoes
      Salad
      Cheese 

第二个是:

Name  Cheese  Milk  Pasta  Juice  Rice  Cake  Tomatoes  Fries  Beef  Salad   Cheeseburger
2012    2      1     1.5     1    0.5    3      2.2      1.4    5      2       4.5
2013    1.7   0.9    1.7     1    0.75   3      2.2      1.3   5.3    1.9       4

我想在第一个系列中创建第三列,以将存在于第二个系列中的值与相同的日期和相同的名称相匹配。我真的不知道该怎么做。 我尝试使用堆栈方法但没有成功。

最终结果应该是这样的:

Date     Item
2012  Cheeseburger  4.5
      Pasta         1.5
      Rice          0.5
2013  Tomatoes      2.2
      Salad         1.9
      Cheese        1.7

有人知道怎么做吗?谢谢

这是生成第二个数据帧的代码

df_two = pd.DataFrame({
     "2012": [2, 1, 1.5, 1, 0.5, 3, 2.2, 1.4, 5, 2, 4.5],
     "2013": [1.7, 0.9, 1.7, 1, 0.75, 3, 2.2, 1.3, 5.3, 1.9, 4]
})

df_two.columns = [
     "Cheese", "Milk", "Pasta", "Juice", "Rice",
     "Cake", "Tomatoes", "Fries", "Beef", "Salad", "Cheeseburger"]

【问题讨论】:

  • 根据您的问题,您的输出应该包含第二个表中的所有项目。换句话说,Cheese 和 Milk 总是输出数据框中的第一项?还是因为您还想要过滤而故意将它们排除在外?
  • 我也想要一个过滤器,这是我的主要问题。第一个表是从全局表示在第二个表中的“宇宙”中的选择
  • 哦,现在我明白了。这实际上很容易。但是,我仍然不完全了解您的数据结构。都是pandas 数据帧吗?
  • 非常感谢您的帮助。第一个表是 Pandas Serie,但第二个表是 Pandas 数据框
  • 酷! @wwnde 确实已经提供了一个基于合并的不错的解决方案。请注意我对解决方案的评论。

标签: python pandas numpy time-series


【解决方案1】:

取第一个数据框为df

df.reset_index(inplace=True)

将第二个数据框作为df1pd.melt 将列折叠为行并得出df2

df2=pd.melt(df1,id_vars=['Name'], value_vars=['Cheese', 'Milk', 'Pasta', 'Juice', 'Rice', 'Cake', 'Tomatoes',
       'Fries', 'Beef', 'Salad', 'Cheeseburger'],var_name='Item')
df2.columns=['Date','Item','value']#Rename columns

df2上左合并df1

pd.merge(df,df2, how='left', on=['Date', 'Item']).set_index(['Date','Item'])

【讨论】:

  • 不错的解决方案!但是,您需要 series_one.to_frame() 作为第一行。第一个数据结构是一个系列,而不是df
  • 不需要我的回答。你的答案很简单。它已经被接受了,它应该被接受。
  • 它与您的解决方案完美配合,正如@MacOS 所说,我需要先将其更改为数据框,但现在一切运行良好。非常感谢你们
  • 感谢@Kben59。疯狂猜测知道pd的人。 series 会知道如何从中获取 pd.dataframe。如果假设造成伤害,我们深表歉意。感谢您的解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2010-12-31
相关资源
最近更新 更多