【问题标题】:Python Pandas Merge or Join of DataFrame Column wise not adding as row after each dataframePython Pandas Merge or Join of DataFrame Column wise not added as row after each dataframe
【发布时间】:2020-04-04 18:22:01
【问题描述】:

我有四个具有不同数据的数据框(假设在某些情况下,每个数据框的列可能相同)。

数据框df0 df1 df3 df4

df0

amountC1    directionC1 index_priceC1   instrument_nameC1   ivC1    priceC1 timestampC1 trade_idC1  trade_seqC1
3   sell    6592.88 BTC-10APR20-7000-C  115.34  0.0675  26-03-2020 08:34    69925302    1
0.1 buy     6688.46 BTC-10APR20-7000-C  112.57  0.07    26-03-2020 17:03    69971504    2
10  sell    6806.04 BTC-10APR20-7000-C  114.33  0.077   27-03-2020 03:11    70020981    3
0.1 sell    6788.24 BTC-10APR20-7000-C  113.92  0.0755  27-03-2020 04:47    70027722    4
1.5 sell    6686.07 BTC-10APR20-7000-C  113.98  0.069   27-03-2020 05:20    70036646    5
0.5 buy     6708.57 BTC-10APR20-7000-C  105.29  0.0635  27-03-2020 08:04    70053020    6

df1

amountC2    directionC2 index_priceC2   instrument_nameC2   ivC2    priceC2 timestampC2 trade_idC2  trade_seqC1
3   sell    6592.88 BTC-10APR20-7200-C  110.34  0.0675  26-03-2020 08:39    69925302    1
0.1 buy     6688.46 BTC-10APR20-7200-C  112.57  0.07    26-03-2020 17:03    69971504    2
10  sell    6806.04 BTC-10APR20-7200-C  114.33  0.077   27-03-2020 03:11    70020981    3
0.1 sell    6788.24 BTC-10APR20-7200-C  110.92  0.0755  27-03-2020 04:47    70027722    4
1.5 sell    6686.07 BTC-10APR20-7200-C  113.98  0.069   27-03-2020 05:20    70036646    5
0.5 buy     6708.57 BTC-10APR20-7000-C  105.29  0.0635  27-03-2020 08:04    70053020    6
0.5 buy     6708.57 BTC-10APR20-7000-C  105.29  0.0635  27-03-2020 08:04    70053020    7

我希望明智地执行此数据框列的合并或连接,下面是我希望得到的输出

amountC1    block_trade_idC1    directionC1 index_priceC1   instrument_nameC1   ivC1    priceC1 tick_directionC1    timestampC1 trade_idC1  trade_seqC1 amountC2    directionC2 index_priceC2   instrument_nameC2   ivC2    priceC2 tick_directionC2    timestampC2 trade_idC2  trade_seqC2
    3       sell    6592.88 BTC-10APR20-7000-C  115.34  0.0675  1   26-03-2020 08:34    69925302    1   5   sell    6607.04 BTC-10APR20-7250-C  116.75  0.057   1   46:41.0 69926125    1
    0.1     buy 6688.46 BTC-10APR20-7000-C  112.57  0.07    0   26-03-2020 17:03    69971504    2   0.1 buy 6685.48 BTC-10APR20-7250-C  112.7   0.057   1   03:31.7 69971444    2
    10      sell    6806.04 BTC-10APR20-7000-C  114.33  0.077   0   27-03-2020 03:11    70020981    3   0.2 sell    6708.99 BTC-10APR20-7250-C  104.17  0.05    2   22:40.0 70054437    3
    0.1     sell    6788.24 BTC-10APR20-7000-C  113.92  0.0755  2   27-03-2020 04:47    70027722    4   0.5 buy 6703.15 BTC-10APR20-7250-C  101.21  0.0475  2   27:01.8 70054899    4
    1.5     sell    6686.07 BTC-10APR20-7000-C  113.98  0.069   2   27-03-2020 05:20    70036646    5   0.5 sell    6709.54 BTC-10APR20-7250-C  94.8    0.043   2   42:11.6 70056479    5
    0.5     buy 6708.57 BTC-10APR20-7000-C  105.29  0.0635  2   27-03-2020 08:04    70053020    6   0.5 buy 6710.71 BTC-10APR20-7250-C  95.39   0.0435  0   42:47.1 70056546    6
    0.5     buy 6713.7  BTC-10APR20-7000-C  102.11  0.0615  2   20:06.1 70054217    7   0.5 buy 6699.43 BTC-10APR20-7250-C  90.78   0.0395  2   23:36.3 70059362    7
    0.2     sell    6704.46 BTC-10APR20-7000-C  102.2   0.061   2   27:02.5 70054901    8   0.5 buy 6699.43 BTC-10APR20-7250-C  90.78   0.0395  3   23:36.3 70059363    8
                                                0.5 buy 6691.95 BTC-10APR20-7250-C  89.92   0.0385  2   32:55.2 70059866    9
                                                0.5 buy 6697.59 BTC-10APR20-7250-C  90.27   0.039   0   35:42.4 70060036    10

我试过这个方法

df = pd.concat([df0,df1,df3,df4], ignore_index=True)

df = [df0, df1, df3, df4]

两者都在下方一一添加数据框。

我想要每个数据框列右侧的副本。 无需进行任何列匹配,只需合并或加入即可。

如何使用 pandas 数据框来实现这一点?

请注意 df1 df2 等数据帧数据必须从后到前填写,以保持所有时间帧的最近数据具有价值。 例子 df0 总共有 800 条记录 df1 有 250 条,df2 有 200 条记录,所以在这有 df1 数据必须从记录号 550 t0 800 填充 df2 数据必须从记录号 600 填充到 800 以便我将有数据来绘制所有数据帧的最近价格变化

如何通过合并和加入来做到这一点

【问题讨论】:

  • 使用 pd.concat 和 axis=1 参数。 pd.concat([df1, df2, df3], axis=1)
  • 嗨马克思巴布!查看此 SO 线程以获取有关改进 pandas 问题的提示:link。总体思路:如果您这样做是为了让我们可以将您的 DataFrame 复制粘贴到 python 脚本中,那么回答您的问题会容易得多。有时这意味着创建更小且更易于使用的示例 DataFrame。
  • 确定我现在会做,要求更新了

标签: python pandas dataframe pandas-groupby


【解决方案1】:

除了 luc 的回答,你还可以在每个的索引上合并。例如:

创建一个示例数据框 df1

import pandas as pd
df1 = pd.DataFrame(columns=["c1","c1a","c1b"], data = [[1,2,3],[4,5,6],[7,8,9]])
print(df1)

# | c1 | c1a | c1b |
# |----|-----|-----|
# | 1  | 2   | 3   |
# | 4  | 5   | 6   |
# | 7  | 8   | 9   |

创建一个示例数据框 df2:

df2 = pd.DataFrame(columns=["c2","c2a","c2b"], data = [["a","b","c"],["d","e","f"],["g","h","i"]])
print(df2)

# | c2 | c2a | c2b |
# |----|-----|-----|
# | a  | b   | c   |
# | d  | e   | f   |
# | g  | h   | i   |

您可以像这样合并这些表:

df3 = df1.merge(df2, left_index=True, right_index=True)
print(df3)

# | c1 | c1a | c1b | c2 | c2a | c2b |
# |----|-----|-----|----|-----|-----|
# | 1  | 2   | 3   | a  | b   | c   |
# | 4  | 5   | 6   | d  | e   | f   |
# | 7  | 8   | 9   | g  | h   | i   |

请注意,列是根据索引合并的,保留 df1 和 df2 的原始顺序。

【讨论】:

    【解决方案2】:

    使用pd.concat()axis 参数沿列而不是行连接:

    import pandas as pd
    
    df1 = pd.DataFrame({
        'Col 1': [1, 2, 3]
    })
    
    df2 = pd.DataFrame({
        'Col 2': [4, 5, 6]
    })
    
    pd.concat([df1, df2], axis=1)
    

    结果表:

       Col 1  Col 2
    0      1      4
    1      2      5
    2      3      6
    

    参考资料:

    【讨论】:

    • 添加要求请检查
    猜你喜欢
    • 2022-12-02
    • 2022-11-09
    • 1970-01-01
    • 2022-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2016-08-23
    相关资源
    最近更新 更多