【问题标题】:Merging 2 pandas tables and using them合并 2 个 pandas 表并使用它们
【发布时间】:2020-04-17 12:30:07
【问题描述】:

我有 2 张熊猫桌, 表A是这样的:

Date  a    b   c    d   e
0
...
.
.
.
2n

和表 B 有类似的东西

Date f  g  k  h   i   j
2
.
.
..
.
.
2n-3
.

问题是每个表都有完全不同的日期和完全不同的列,但是如果它是以前没有的列,我想得到一个新的表,它是一个新的二进制列(让我们调用它) MARK) 标记它是来自表 A 还是 B。 像这样:

Date   MARK  a    b   c    d   e  f  g  e  h   i   j
0        1   .    .    .   .   .  0  0  0  0   0    0
.
2        0   0    0   0    0   0  .  .   .  .  .    .
.
.
.
.
.
2n-3        0   0    0   0    0   0  .  .   .  .  .    .
.
.
2n        1   .    .    .   .   .  0  0  0  0   0    0 

我需要它按日期排序...请帮我解决这个问题... 谢谢

【问题讨论】:

    标签: pandas pandas-groupby sklearn-pandas


    【解决方案1】:

    在之前添加“标记”列:

    df1['Mark'] = 0
    df2['Mark'] = 1
    

    然后pd.concat 会做你想做的事:

    df = pd.concat([df1, df2], axis = 0, sort= True)
    

    注意:确保您的日期是两者的索引:

    df1 = df1.set_index('date_column')
    df2 = df2.set_index('date_column')
    

    【讨论】:

    • 效果很好,但是给出 Nan 之前不存在的值而不是零,有什么解决方案吗?
    • 抱歉我没看懂问题
    • @secret 你可以用df.fillna(0)
    【解决方案2】:

    其他选项是使用与指标功能合并:

    df = df1.merge(df2, on='Date', how='outer', indicator='Mark')
    

    这将使用 left_only 或 right_only 指示数据来自哪个数据帧。 您可以像这样将其更改为 0 和 1:

    df['Mark'] = (df['Mark'] == 'right_only').astype(int)
    

    完整示例:

    df1 = pd.DataFrame(
        data={'Date': pd.date_range('2019-01-01', '2019-01-03'), 
              'a': [1,1,1], 
              'b': [2,2,2]})
    df2 = pd.DataFrame(
        data={'Date': pd.date_range('2019-01-11', '2019-01-13'), 
              'c': [3,3,3], 
              'd': [4,4,4]})
    df = df1.merge(df2, on='Date', how='outer', indicator='Mark')
    df['Mark'] = (df['Mark'] == 'right_only').astype(int)
    

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 2017-09-26
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2017-11-22
      • 2022-10-04
      相关资源
      最近更新 更多