首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将dataframe值ab、ba更改为ab

如何将dataframe值ab、ba更改为ab
EN

Stack Overflow用户
提问于 2021-09-17 13:38:05
回答 4查看 44关注 0票数 0
代码语言:javascript
复制
df3=pd.DataFrame({'col1':['a','b','c','d','a'],
                    'col2':['b','a','a','c','c'],
                     })
df3['col3']=df3['col1']+df3['col2']

数据帧将如下所示

代码语言:javascript
复制
  col1 col2 col3
0   a   b   ab
1   b   a   ba
2   c   a   ca
3   d   c   dc
4   a   c   ac

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

代码语言:javascript
复制
  col1 col2 col3
0   a   b   ab
1   b   a   ab
2   c   a   ac
3   d   c   dc
4   a   c   ac

谢谢你的帮助,我可以添加更多的问题吗?

代码语言:javascript
复制
df3=pd.DataFrame({'col1':['banana','apple','pie','mango','cola'],
                    'col2':['apple','banana','mango','cola','mango'],
                     })
df3['col3']=df3['col1']+df3['col2']

结果

代码语言:javascript
复制
    col1    col2    col3
0   banana  apple   bananaapple
1   apple   banana  applebanana
2   pie     mango   piemango
3   mango   cola    mangocola
4   cola    mango   colamango

变化

代码语言:javascript
复制
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,我想做的是过滤

EN

回答 4

Stack Overflow用户

发布于 2021-09-17 13:59:30

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

代码语言:javascript
复制
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)
        )

输出:

代码语言:javascript
复制
  col1 col2 col3
0    a    b   ab
1    b    a   ab
2    c    a   ca
3    d    c   dc
4    a    c   ca
票数 1
EN

Stack Overflow用户

发布于 2021-09-17 13:45:04

您可以使用apply生成带有str.joinsorted的col3,以确保字母顺序的一致性:

代码语言:javascript
复制
df3['col3'] = df3.apply(lambda r: ''.join(sorted(r)), axis=1)

输出:

代码语言:javascript
复制
  col1 col2 col3
0    a    b   ab
1    b    a   ab
2    c    a   ac
3    d    c   cd
4    a    c   ac
票数 0
EN

Stack Overflow用户

发布于 2021-09-17 13:47:56

这个怎么样?

代码语言:javascript
复制
df3['col3'] = np.where(df3['col2']=='a', df3['col2']+df3['col1'], df3['col1']+df3['col2'])

或者是这样的:

代码语言:javascript
复制
df3['col3'] = [y+x if y == 'a' else x+y for x,y in zip(df3['col1'], df3['col2'])]

-=EDIT=-如果我们不担心整个cd/dc问题,请尝试以下命令:

代码语言:javascript
复制
df3['col3'] = np.where(df3['col2']<=df3['col1'], df3['col2']+df3['col1'], df3['col1']+df3['col2'])

代码语言:javascript
复制
df3['col3'] =[y+x if y <= x else x+y for x,y in zip(df3['col1'], df3['col2'])]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69224407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档