我有一个数据框,像这样:
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中可行吗?
5sxhfpxr1#
假设空单元格中有NaNs,我将使用groupby.first和frozenset作为grouper:
groupby.first
frozenset
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
okxuctiv2#
没有太多关于 Dataframe 结构的信息,所以我只假设几件事-如果我错了,请纠正我:
如果所有这些假设都是正确的,您可以将数据拆分为两个 Dataframe ,df_upperhalf包含Col1,df_lowerhalf包含Col2。
df_upperhalf
df_lowerhalf
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))
2条答案
按热度按时间5sxhfpxr1#
假设空单元格中有NaNs,我将使用
groupby.first
和frozenset
作为grouper:输出:
okxuctiv2#
没有太多关于 Dataframe 结构的信息,所以我只假设几件事-如果我错了,请纠正我:
如果所有这些假设都是正确的,您可以将数据拆分为两个 Dataframe ,
df_upperhalf
包含Col1,df_lowerhalf
包含Col2。然后,您可以轻松地组合这些值:
如果我的一些假设是不正确的,这当然不会产生你想要的结果。
也有很多方法可以用更少的代码行来完成它,但我认为这样你会得到更好的 Dataframe ,代码应该很容易阅读。
编辑:
我想这样会快一点: