使用pandas按行合并具有相同索引的两个数据框

4

假设我有以下两个数据框X1和X2。我想合并这两个数据框的行,以便每个来自每个数据框的索引相同时,将来自两个数据框的对应行组合起来。

       A  B C  D
DATE1 a1 b1 c1 d1

DATE2 a2 b2 c2 d2

DATE3 a3 b3 c3 d3


       A B  C  D
DATE1 f1 g1 h1 i1

DATE2 f2 g2 h2 i2

DATE3 f3 g3 h3 i3

how would i combine them to get


      A  B  C  D
DATE1 A1 B1 C1 D1
      f1 g1 h1 i1

DATE2 A2 B2 C2 D2
      f2 g2 h2 i2

DATE3 A3 B3 C3 D3
      f3 g3 h3 i3

我迄今为止尝试过这个方法,但似乎并没有起作用:
 d= pd.concat( { idx : [ X1[idx], X2[idx]]  for idx, value in appended_data1.iterrows() } , axis =1}

谢谢


你想将这两行合并成什么?是具有相同日期的两个独立行,还是一个列表或字典? - adabsurdum
是的,两个不同的行具有相同的日期。 - uniXVanXcel
2个回答

6

Option 1

df3 = df1.stack().to_frame('df1')
df3.loc[:, 'df2'] = df2.stack().values
df3 = df3.stack().unstack(1)
df3

在这里输入图片描述


选项2 概括

idx = df1.stack().index

dfs = [df1, df2]
dflabels = ['df1', 'df2']

a = np.stack([d.values.flatten() for d in dfs], axis=1)
df3 = pd.DataFrame(a, index=idx, columns=dflabels).stack().unstack(1)

设置

from StringIO import StringIO
import pandas as pd


df1_text = """       A  B C  D
DATE1 a1 b1 c1 d1
DATE2 a2 b2 c2 d2
DATE3 a3 b3 c3 d3"""


df2_text = """       F  G H  I
DATE1 f1 g1 h1 i1
DATE2 f2 g2 h2 i2
DATE3 f3 g3 h3 i3"""

df1 = pd.read_csv(StringIO(df1_text), delim_whitespace=True)
df2 = pd.read_csv(StringIO(df2_text), delim_whitespace=True)

df1

enter image description here

df2

enter image description here


太好了!谢谢!抱歉,我尝试过了,但是由于等级不够高,无法投票 - 希望其他人能帮忙。 - uniXVanXcel
我想知道如果我想迭代这个过程并添加几个数据框,我该怎么做?谢谢。 - uniXVanXcel
没关系。我想我可以添加第二行代码并迭代数据框名称列表。它有效。我刚试过了。 - uniXVanXcel
1
@PythonTitus 我更新了帖子,提供了一个比迭代更好的通用解决方案。 - piRSquared

1
也许这个解决方案也可以解决你的问题:

df3 =  pd.concat([df1,df2]).sort_index()

print df3
Out[42]: 
         A   B   C   D
DATE1  a1  b1  c1  d1
DATE1  f1  g1  h1  i1
DATE2  a2  b2  c2  d2
DATE2  f2  g2  h2  i2
DATE3  a3  b3  c3  d3
DATE3  f3  g3  h3  i3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接