Skip to main content
 首页 » 编程设计

python之Pandas 在单独的列中合并带有 id 的行

2025年05月04日13www_RR

这里完全崩溃了,需要一些帮助。

我有一个包含 +10m 行和大约 150 列的 DataFrame,带有两个 ID,如下所示:

df = pd.DataFrame({'id1' : [1,2,5,3,6,4] 
              ,'id2' : [2,1,np.nan,4,np.nan,3] 
              ,'num' : [123, 3231, 123, 231, 6534,2394]}) 
 
 
    id1 id2 num 
0   1   2.0 123 
1   2   1.0 3231 
2   5   NaN 123 
3   3   4.0 231 
4   6   NaN 6534 
5   4   3.0 2394 

其中行索引 0 和 1 是给定 id1 和 id2 的一对,行索引 3 和 5 是一对以相同的方式。我想要下表,其中第二行对与第一行对合并

df = pd.DataFrame({'id1' : [1,5,3,6] 
              ,'id2' : [2,np.nan,3,np.nan] 
              ,'num' : [123, 123, 231, 6534] 
              ,'2num' : [3231, np.nan, 2394, np.nan,]}) 
 
 
    id1 id2  num  2_num 
0   1   2.0  123  3231.0 
1   5   NaN  123  NaN 
2   3   3.0  231  2394.0 
3   6   NaN  6534 NaN 

如何使用 id1 和 id2 并将“id row 2”中的所有后续列标记为“2_”?

请您参考如下方法:

这是一种基于合并的方法,(感谢@pirSquared 的改进)。即

ndf = df.merge(df, 'left', left_on=['id1', 'id2'], right_on=['id2', 'id1'], suffixes=['', '_2']).drop(['id1_2', 'id2_2'], 1) 
cols = ['id1','id2'] 
ndf[cols] = np.sort(ndf[cols],1) 
new  = ndf.drop_duplicates(subset=['id1','id2'],keep='first') 
  id1  id2   num   num_2 
0  1.0  2.0   123  3231.0 
2  5.0  NaN   123     NaN 
3  3.0  4.0   231  2394.0 
4  6.0  NaN  6534     NaN