如何使用Python合并不同列中相同值的行(Pandas)

t5zmwmid  于 2023-02-11  发布在  Python
关注(0)|答案(2)|浏览(204)

我有一个数据框,像这样:

Id  Col1    Col2    Paired_Id
1   a       A
2   c       B
A       b   1
B       d   2

我想合并行以得到类似这样的输出。合并后删除配对的行。

Id  Col1    Col2    Paired_Id
1   a   b   A
2   c   d   B

有什么提示吗?
所以:合并行(ID)和它的Paired_ID条目。这在Pandas中可行吗?

5sxhfpxr

5sxhfpxr1#

假设空单元格中有NaNs,我将使用groupby.firstfrozenset作为grouper:

group = df[['Id', 'Paired_Id']].apply(frozenset, axis=1)

out = df.groupby(group, as_index=False).first()

输出:

Id Col1 Col2 Paired_Id
0  1    a    b         A
1  2    c    d         B
okxuctiv

okxuctiv2#

没有太多关于 Dataframe 结构的信息,所以我只假设几件事-如果我错了,请纠正我:

  • 在Col1中有项的行在Col2中永远不会有项。
  • 相应的行以相同的顺序出现(行1、2、3 ......然后是相应的行1、2、3 ......)
  • 每一行后面在 Dataframe 中都有一个对应的第二行

如果所有这些假设都是正确的,您可以将数据拆分为两个 Dataframe ,df_upperhalf包含Col1,df_lowerhalf包含Col2。

df_upperhalf = df.iloc[:len(df.index),]
df_lowerhalf = df.iloc[(len(df.index)*(-1):,]

然后,您可以轻松地组合这些值:

df_combined = df_upperhalf
df_combined['Col2'] = df_lowerhalf['Col2']

如果我的一些假设是不正确的,这当然不会产生你想要的结果。
也有很多方法可以用更少的代码行来完成它,但我认为这样你会得到更好的 Dataframe ,代码应该很容易阅读。
编辑:
我想这样会快一点:

df_upperhalf = df.head(len(df.index))
df_lowerhalf = df.tail(len(df.index))

相关问题