【问题标题】:Combine two dataframes one row from each one at a time | Python | Pandas一次将两个数据帧组合成一行 |蟒蛇 |熊猫
【发布时间】:2018-08-14 15:21:12
【问题描述】:

我有两个这样的数据框:

dataframe1
col1      col2
s8771      1
s9562      1
s3352      1

dataframe2
col1      col2
s834      0
s5216     0
s8104     0
s174      0

我想合并两个数据帧,我知道pd.append,但我想要的是一次从每个数据帧中提取一行。作为输出:

result
col1      col2
s8771      1
s834       0
s9562      1
s5216      0
s3352      1
s8104      0
s174       0

有什么帮助吗?

【问题讨论】:

    标签: python pandas append


    【解决方案1】:

    你可以试试:

    result = pd.concat([dataframe1, dataframe2]).sort_index(kind='merge')
    

    例子:

    df = pd.DataFrame( {'a':[1,2,3,4,5], 'b':[0,0,0,0,0]})
    df1 = pd.DataFrame( {'a':[6,7,8,9], 'b':[1,1,1,1]})
    df2 = pd.concat([df, df1]).sort_index(kind='merge')
    

    输出:

       a  b
    0  1  0
    0  6  1
    1  2  0
    1  7  1
    2  3  0
    2  8  1
    3  4  0
    3  9  1
    4  5  0
    

    【讨论】:

    • 可能想指出您在此处指定合并排序而不是快速排序的原因...也许通过引用文档中说 mergesort 是唯一稳定算法的行 i> 以及为什么这在这里很重要......
    【解决方案2】:

    使用append + sort_index + reset_indexdrop=True 作为默认索引:

    df = dataframe1.append(dataframe2).sort_index().reset_index(drop=True)
    print (df)
        col1  col2
    0  s8771     1
    1   s834     0
    2  s9562     1
    3  s5216     0
    4  s3352     1
    5  s8104     0
    6   s174     0
    

    【讨论】:

    • 5 分钟后将“mergesort”放入而不是 Joe :)
    • 坦率地说,我从来没有注意到有什么不同......我只是指出乔的答案是在你添加它之前 5 分钟直接用“mergesort”来的......所以现在不同的是,是.append.concat 在这里使用是更好的选择...
    • @JonClements - 我尝试了一些研究,似乎没有必要使用 mergesort
    • 是的...刚刚用df = pd.DataFrame({'value': range(10000)}, index=[0] * 10000) 等尝试了一些事情...似乎使用默认值对单级索引进行排序很好...
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2021-11-09
    • 2023-03-20
    • 2022-01-11
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多