在pandas中将任意数量的列合并为一列

2024-10-03 06:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题是关于here的特定案例的一般版本。在

我有一个pandas数据帧,其中的列包含整数。我想将所有这些整数连接到一列中的一个字符串中。在

给定this answer,对于特定的列,这是有效的:

(dl['ungrd_dum'].map(str) +
 dl['mba_dum'].map(str) +
 dl['jd_dum'].map(str) +
 dl['ma_phd_dum'].map(str))

但是假设我有许多(数百)这样的列,它们的名称在一个列表dummies中。我肯定有一些很酷的Python式的方法,用一条神奇的线就能做到这一切。我尝试过将mapdummies一起使用,但是还没有找到答案。在


Tags: 数据字符串answer版本mappandashere整数
3条回答

你应该能做到的

df[dummies].astype(str).apply(lambda x: ''.join(x), axis=1)

示例:

^{pr2}$

编辑

正如@JohnE指出的那样,您可以调用sum,这样会更快:

df[cols].astype(str).sum(axis=1)

但是,这将隐式地将数据类型转换为float64,因此您必须再次转换回str,并在必要时切掉小数点:

df[cols].astype(str).sum(axis=1).astype(str).str[:-2]

您需要做的第一件事是尽可能高效地将数字的数据帧转换为字符串的数据帧:

dl = dl.astype(str)

然后,您处于相同的情况as this other question,并且可以使用与this answer中相同的Series.str访问器技术:

.str.cat()

使用^{}可以执行以下操作:

dl['result']=dl[dl.列[0]]。结构猫([dl[c]代表c indl.列[1:]],sep='')

str.join()

要使用.str.join(),您需要一系列iterable,比如元组。在

^{pr2}$

不要用list代替tuple,否则apply()方法将返回Dataframe,并且数据帧没有.str访问器,就像Series。在

from operator import add
reduce(add, (df[c].astype(str) for c in cols), "")

例如:

^{pr2}$

相关问题 更多 >