【问题标题】:Merging Dataframe with Series based on column [duplicate]基于列将数据框与系列合并[重复]
【发布时间】:2018-01-30 03:42:29
【问题描述】:

我有一个熊猫系列 S:

Date  
2/27/2017    149 
2/28/2017    150
3/01/2017    154
3/04/2017    152
3/12/2017    156
3/17/2017    148

我也有一个 Dataframe df

Date                  A   B    C   PS
2/28/2017 12:42:05    1    2   4  2/27/2017
2/28/2017 12:42:07    1    2   4  2/27/2017
2/28/2017 12:42:08    1    2   4  2/27/2017
2/28/2017 12:42:55    1    2   4  2/27/2017
3/01/2017 12:42:05    1    2   4  2/28/2017
3/01/2017 12:42:07    1    2   4  2/28/2017
3/01/2017 12:42:08    1    2   4  2/28/2017
3/01/2017 12:42:09    1    2   4  2/28/2017
3/05/2017 12:42:05    1    2   4  3/04/2017
3/05/2017 12:42:07    1    2   4  3/04/2017
3/05/2017 12:42:08    1    2   4  3/04/2017
3/05/2017 12:42:09    1    2   4  3/04/2017

A、B、C 确实发生了变化,但它们与这个问题无关。

我想要一个如下的输出数据框:

Date                  A   B    C   PS         Value
2/28/2017 12:42:05    1    2   4  2/27/2017   149
2/28/2017 12:42:07    1    2   4  2/27/2017   149
2/28/2017 12:42:08    1    2   4  2/27/2017   149
2/28/2017 12:42:55    1    2   4  2/27/2017   149
3/01/2017 12:42:05    1    2   4  2/28/2017   150
3/01/2017 12:42:07    1    2   4  2/28/2017   150
3/01/2017 12:42:08    1    2   4  2/28/2017   150
3/01/2017 12:42:09    1    2   4  2/28/2017   150
3/05/2017 12:42:05    1    2   4  3/04/2017   152
3/05/2017 12:42:07    1    2   4  3/04/2017   152
3/05/2017 12:42:08    1    2   4  3/04/2017   152
3/05/2017 12:42:09    1    2   4  3/04/2017   152

基本上我想在 df 中添加一个名为 Value 的列,其中 Value 是与系列 S 中的日期相对应的任何值,即 df 的 PS 列中的任何值。

伪代码是 df["值"] = S[df[PS]]

我不想把系列中的日期列/索引带过来。

【问题讨论】:

  • 这是一个简单的merge() 操作。阅读merge() 上的任何教程。
  • df.info()s.info() 的输出是什么? (其中dfs 分别是您的数据框和系列的名称)。
  • df.merge(s.to_frame(), left_on='PS', right_index=True) 假设您的系列索引中的日期与PS 列中的日期一致。
  • 请注意,与映射或替换相比,合并要慢得多。

标签: python pandas dataframe merge series


【解决方案1】:

使用.merge()将数据框与系列合并:

new_df = df.merge(pd.DataFrame(s, columns=['Value']), right_index=True, left_on='PS', how='outer')

您还可以遍历 PS 并从系列中获取值:

df.loc[:, 'Value'] = [s[ps] for ps in df['PS']]

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2019-11-22
    • 2019-02-12
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多