这个问题与前面的this posted相同。我想连接三列,而不是连接两列:
以下是两列的组合:
df = DataFrame({'foo':['a','b','c'], 'bar':[1, 2, 3], 'new':['apple', 'banana', 'pear']})
df['combined']=df.apply(lambda x:'%s_%s' % (x['foo'],x['bar']),axis=1)
df
bar foo new combined
0 1 a apple a_1
1 2 b banana b_2
2 3 c pear c_3
我想用这个命令组合三列,但它不起作用,你有什么想法吗?
df['combined']=df.apply(lambda x:'%s_%s' % (x['bar'],x['foo'],x['new']),axis=1)
15条答案
按热度按时间xv8emn3q1#
另一种使用
DataFrame.apply()
的解决方案,当您想要联接更多列时,它的打字稍微少一点,可伸缩性更强:zkure5ic2#
您可以使用字符串连接来组合列,可以使用分隔符或不使用分隔符。您必须转换非字符串列上的类型。
cx6n0qe33#
如果要合并更多列,使用Series方法
str.cat
可能会很方便:基本上,您选择第一列(如果它还不是
str
类型,则需要追加.astype(str)
),然后再追加其他列(用可选的分隔符分隔)。bnlyeluc4#
我只是想对两种解决方案(针对30K行df)进行时间比较:
还有几个选项:
zazmityj5#
@allen给出的答案相当通用,但对于较大的 Dataframe 可能缺乏性能:
Reduced确实好了很多:
kokeuurv6#
可能最快的解决方案是在纯Python中操作:
与@MaxU答案的比较(使用同时包含数字列和字符串列的
big
数据框):与@derChambers答案的比较(使用他们的
df
数据框,其中所有列都是字符串):xkrw2x1b7#
我想你少了一个*%s*
6bc51xsx8#
首先将列转换为字符串。然后使用.T.agg(‘_’.Join)函数将它们连接起来。有关更多信息,请访问here
iqjalb3h9#
如果使用字符串(‘_’)连接,请将列转换为所需的字符串,然后可以连接 Dataframe 。
a6b3iqyw10#
X=x是用来分隔两个合并列的任何分隔符(例如:空格)。
pgccezyw11#
如果您有一个想要连接的列的列表,并且可能想要使用分隔符,下面是您可以做的
这应该比
apply
更快,并且需要连接任意数量的列。omqzjyyz12#
@derChambers我又找到了一个解决方案:
rlcwz9us13#
您可以创建一个函数来使实现更简洁(例如。如果您在整个实施过程中多次使用此功能):
示例用法:
aor9mmx114#
如果您需要将此类操作与其他 Dataframe 转换链接,请使用
assign
:watbbzwu15#
考虑到要组合三列,则需要三个格式说明符
'%s_%s_%s'
,而不仅仅是两个'%s_%s'
。以下内容将完成此工作或者,如果想要创建一个单独的列表来存储想要组合的列,可以使用以下方法。
最后一种方法更方便,因为用户只需更改或添加列表中的列名-它需要的更改较少。