Skip to main content
 首页 » 编程设计

python之在 Pandas 中将两行加在一起形成一长行

2025年05月04日12jpfss

希望是一个快速的问题,但我有两个 DataFrame,根据我要查找的名称,我从每个 DataFrame 中提取了一行:

mmb_df[mmb_df['name'] == mmb_name] 
 
jps_df[jps_df['name'] == jps_name] 

这给了我两行,每行大约 60 列,我想做的就是将它们组合起来,这样我就有了 1 行,每行 120 列。有些列确实具有相同的名称,但我不确定这是否有任何区别。

如果我有这样的两行:

name     tag   x    y  
001_Dc   F     243  567 
 
name     tag   position1    position2 
jps_043  EW    908          219 

我只需要它们:

name     tag   x    y     name      tag   position1   position2 
001_Dc   F     243  567   jps_043   EW    908         219 

我确信这很容易完成,但我运气不好。

请您参考如下方法:

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

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

<s>pd.concat([a,b], axis=1)</s>

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') 

如果可能某些条件返回更多的行是可能的只选择第一个:

a = a.iloc[[0]] 
b = b.iloc[[0]] 
b.index = a.index 
c = a.join(b, lsuffix='first') 

或者通过 set_index 将第一个索引设置为 0双 []:

a = a.iloc[[0]].set_index([[0]]) 
b = b.iloc[[0]].set_index([[0]]) 
c = a.join(b, lsuffix='first') 

仅针对第一行的解决方案 - 通过 idxmax 获取第一行 True并通过 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')