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

标签 python pandas

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

我有一个包含 +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

关于python - Pandas 在单独的列中合并带有 id 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46464420/

相关文章:

python - 使用 pandas 从 csv 文件中读回元组

python - Pandas 面板最大

python - 使用 matplotlib 散点图的条件颜色

python - pandas 如何在 groupby 内进行 groupby

python - python3和python3m可执行文件之间的区别

python - Python Tornado 中的多个静态目录

python - Python 的面部和头发检测

python - 如何在数据框中找到循环

python - Django:将 ChoiceField 选择作为位置参数传递给表单的 `__init__()` 会导致 AttributeError

python - 如何使用 groupby 在 python pandas 中连接字符串?