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如果我想要ba,ca to ab,ac,ab=ba就像这样
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,我想做的是过滤
发布于 2021-09-17 13:59:30
如果保持第一个键的顺序很重要,下面是一个有效的解决方案:
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发布于 2021-09-17 13:45:04
您可以使用apply生成带有str.join和sorted的col3,以确保字母顺序的一致性:
df3['col3'] = df3.apply(lambda r: ''.join(sorted(r)), axis=1)输出:
col1 col2 col3
0 a b ab
1 b a ab
2 c a ac
3 d c cd
4 a c ac发布于 2021-09-17 13:47:56
这个怎么样?
df3['col3'] = np.where(df3['col2']=='a', df3['col2']+df3['col1'], df3['col1']+df3['col2'])或者是这样的:
df3['col3'] = [y+x if y == 'a' else x+y for x,y in zip(df3['col1'], df3['col2'])]-=EDIT=-如果我们不担心整个cd/dc问题,请尝试以下命令:
df3['col3'] = np.where(df3['col2']<=df3['col1'], df3['col2']+df3['col1'], df3['col1']+df3['col2'])或
df3['col3'] =[y+x if y <= x else x+y for x,y in zip(df3['col1'], df3['col2'])]https://stackoverflow.com/questions/69224407
复制相似问题