gpt4 book ai didi

python - 如何按行连接包含字符串的多个列?

转载 作者:太空狗 更新时间:2023-10-30 02:41:22 24 4
gpt4 key购买 nike

我有一系列特定的数据集,它们具有以下一般形式:

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

enter image description here

到目前为止一切顺利。这段代码可能很简单,但一旦我收到另一个数据集,它就会变得笨拙和不灵活,其中 tn 列的数量增加了。这就是我的问题所在:

是否有任何其他语法可以跨多个列合并内容?与数字列无关的东西,类似于:

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

基本上,我想实现与下面链接中的 OP 相同的效果,但字符串之间有空格: Concatenate row-wise across specific columns of dataframe

最佳答案

操作字符串列(Series)的键en mass Series.str 访问器。

我能想到两个.str方法来做你想做的事。

str.cat()

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

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()

第二个是 .str.join() 方法,其工作方式类似于标准 Python 方法 string.join() , 但为此你需要有一列 (Series) 的可迭代对象,例如,一列元组,我们可以通过应用 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()方法返回 list并且返回的列表与原始(子)数据框的列具有相同数量的条目,Dataframe.apply()返回 Dataframe而不是 Series .

关于python - 如何按行连接包含字符串的多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com