如何对包含字符串的几列进行逐行串联?[英] How to row-wise concatenate several columns containing strings?

本文是小编为大家收集整理的关于如何对包含字符串的几列进行逐行串联?的处理方法,想解了如何对包含字符串的几列进行逐行串联?的问题怎么解决?如何对包含字符串的几列进行逐行串联?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一系列特定的数据集,这些数据集采用以下一般形式:

import pandas as pd
import random
df = pd.DataFrame({'n': random.sample(xrange(1000), 3), 't0':['a', 'b', 'c'], 't1':['d','e','f'], 't2':['g','h','i'], 't3':['i','j', 'k']})

tn 列的数量( t0,t1,t2 ... tn )取决于数据集,但始终是<30. 我的目的是合并每一行的 tn 列的内容,以便我实现此结果(请注意,对于可读性,我需要在元素之间保持空格):

df['result'] = df.t0 +' '+df.t1+' '+df.t2+' '+ df.t3

在此处输入图像说明

到目前为止一切都很好.此代码可能很简单,但是一旦收到另一个数据集,它就会变得笨拙且僵化,其中 tn 列的数量上升.这是我的问题出现的地方:

是否还有其他语法可以在多个列中合并内容?对数字列的不可知论,类似于:

df['result'] = ' '.join(df.ix[:,1:])

基本上,我想实现与下面链接中的OP相同,但是在字符串之间使用空格: 跨dataframe的特定特定列 /p>

推荐答案

在字符串的列(系列)中操作的键.

我可以想到两个.str做您想做的方法.

str.cat()

第一个是 str.cat str.cat str.cat str.cat str.cat/a>.您必须从系列开始,但是您可以将系列列表(不幸的是您不能传递数据框)与可选的分隔符连接.使用您的示例:

column_names = df.columns[1:]  # skipping the first, numeric, column
series_list = [df[c] for c in column_names[1:]]
# concatenate:
df['result'] = series_list[0].str.cat(series_list[1:], sep=' ')

或一行:

df['result'] = df[df.columns[1]].str.cat([df[c] for c in df.columns[2:]], sep=' ')

str.join()

第二个是 string.join() string.join() ,但是您需要将列(系列)的曲线(系列),例如一列组成,我们可以通过将tuples行的tuples行应用于您'对:

感兴趣
tuple_series = df[column_names].apply(tuple, axis=1)
df['result'] = tuple_series.str.join(' ')

或一行:

df['result'] = df[df.columns[1:]].apply(tuple, axis=1).str.join(' ')

顺便说一句,请勿使用list而不是tuple尝试以上.从pandas-0.20.1开始,如果传递到Dataframe.apply()方法返回a list的函数,并且返回的列表具有与原始(sub)dataframe的列相同的数字条目,则Dataframe.apply()返回Dataframe Series.

其他推荐答案

这是一个稍微替代的解决方案:

In [57]: df['result'] = df.filter(regex=r'^t').apply(lambda x: x.add(' ')).sum(axis=1).str.strip()

In [58]: df
Out[58]:
     n t0 t1 t2 t3   result
0   92  a  d  g  i  a d g i
1  916  b  e  h  j  b e h j
2  363  c  f  i  k  c f i k

其他推荐答案

除了使用apply连接字符串之外,您还可以使用agg来做到.

df[df.columns[1:]].agg(' '.join, axis=1)
Out[118]: 
0    a d g i
1    b e h j
2    c f i k
dtype: object

本文地址:https://www.itbaoku.cn/post/1728044.html