首页 > 解决方案 > 如何将数据框值 ab,ba 更改为 ab

问题描述

df3=pd.DataFrame({'col1':['a','b','c','d','a'],
                    'col2':['b','a','a','c','c'],
                     })
df3['col3']=df3['col1']+df3['col2']

和数据框将是这样的

  col1 col2 col3
0   a   b   ab
1   b   a   ba
2   c   a   ca
3   d   c   dc
4   a   c   ac

如果 ab=ba 我想要 ba, ca to ab, ac 这样

  col1 col2 col3
0   a   b   ab
1   b   a   ab
2   c   a   ac
3   d   c   dc
4   a   c   ac

感谢您的帮助我可以添加更多问题吗?

df3=pd.DataFrame({'col1':['banana','apple','pie','mango','cola'],
                    'col2':['apple','banana','mango','cola','mango'],
                     })
df3['col3']=df3['col1']+df3['col2']

结果

    col1    col2    col3
0   banana  apple   bananaapple
1   apple   banana  applebanana
2   pie     mango   piemango
3   mango   cola    mangocola
4   cola    mango   colamango

改变

col1    col2    col3
0   banana  apple   bananaapple
1   apple   banana  bananaapple
2   pie     mango   piemango
3   mango   cola    mangocola
4   cola    mango   mangocola

我想做的是过滤如果 ab=ba 更改为 ab

标签: pythonpandas

解决方案


如果保持第一个键的顺序很重要,下面是一个可行的解决方案:

df3.join(df3.groupby(df3.apply(frozenset, axis=1)) # use a frozenset a key for uniqueness
            # below to craft a custom transform by using the first row per group
            .apply(lambda g: pd.Series([''.join(g.iloc[0])]*len(g),
                                       name='col3',
                                       index=g.index,
                                      ))
            .droplevel(0)
        )

输出:

  col1 col2 col3
0    a    b   ab
1    b    a   ab
2    c    a   ca
3    d    c   dc
4    a    c   ca

推荐阅读