在pandas中添加两行以形成一个长行

Sam*_*ton 1 python dataframe pandas

希望是一个简单的问题,但我有两个DataFrame,根据我正在寻找的名称,我从中抽取了一行:

mmb_df[mmb_df['name'] == mmb_name]

jps_df[jps_df['name'] == jps_name]
Run Code Online (Sandbox Code Playgroud)

这给了我两行,每行约60列,而我想做的就是将它们组合在一起,这样我就有了一行120列.有些列确实有相同的名称,但我不确定这是否有所不同.

如果我有两行如下:

name     tag   x    y 
001_Dc   F     243  567

name     tag   position1    position2
jps_043  EW    908          219
Run Code Online (Sandbox Code Playgroud)

我只需要它们:

name     tag   x    y     name      tag   position1   position2
001_Dc   F     243  567   jps_043   EW    908         219
Run Code Online (Sandbox Code Playgroud)

我确信这可以轻松完成,但我没有运气.

jez*_*ael 5

我认为您首先需要相同的索引然后使用join:

这里使用concat不是好的解决方案,因为不能避免重复的列名.

pd.concat([a,b], axis=1)
Run Code Online (Sandbox Code Playgroud)
a = mmb_df[mmb_df['name'] == mmb_name]
b = jps_df[jps_df['name'] == jps_name]

#same both indices
b.index = a.index

#or implicitely set indices
#a.index = [0] 
#b.index = [0] 
c = a.join(b, lsuffix='first')
Run Code Online (Sandbox Code Playgroud)

如果可能某些条件返回更多行,则可以先选择:

a = a.iloc[[0]]
b = b.iloc[[0]]
b.index = a.index
c = a.join(b, lsuffix='first')
Run Code Online (Sandbox Code Playgroud)

或者设置第一指标,以0通过set_index[]:

a = a.iloc[[0]].set_index([[0]])
b = b.iloc[[0]].set_index([[0]])
c = a.join(b, lsuffix='first')
Run Code Online (Sandbox Code Playgroud)

仅针对第一行的解决方案 - 获取第一Trueidxmax并选择loc:

a = mmb_df.loc[[(mmb_df['name'] == mmb_name).idxmax()]].set_index([[0]])
b = jps_df.loc[[(jps_df['name'] == jps_name).idxmax()]].set_index([[0]])

c = a.join(b, lsuffix='first')
Run Code Online (Sandbox Code Playgroud)