Pandas:将列列表连接到一列

时间:2017-11-25 00:54:30

标签: python pandas

我想知道我是否可以在Pandas中构建这样的模块:

    def concatenate(df,columnlist,newcolumn):
        # df is the dataframe and
        # columnlist is the list contains the column names of all the columns I want to concatnate
        # newcolumn is the name of the resulted new column

        for c in columnlist:
            ...some Pandas functions

        return df # this one has the concatenated "newcolumn"

我问这个因为len(列表)会非常大而且动态。谢谢!

2 个答案:

答案 0 :(得分:5)

试试这个:

import numpy as np
np.add.reduce(df[columnlist], axis=1)

这样做是为了“添加”每行中的值,对于字符串来说意味着连接它们(“abc”+“de”==“abcde”)。

最初我以为你想把它们纵向连接成一个更长的所有值的系列。如果其他人想要这样做,这里是代码:

pd.concat(map(df.get, columnlist)).reset_index(drop=True)

答案 1 :(得分:4)

给出如下数据框:

df

     A    B
0  aaa  ddd
1  bbb  eee
2  ccc  fff

您可以使用df.sum,因为每列都是一个字符串列:

df.sum(1)

0    aaaddd
1    bbbeee
2    cccfff
dtype: object

如果您需要执行转换,可以这样做:

df.astype(str).sum(1)

如果您需要选择数据的子集(仅限字符串列?),您可以使用select_dtypes

df.select_dtypes(include=['str']).sum(1)

如果您需要按列选择,则应执行以下操作:

df[['A', 'B']].sum(1)

在每种情况下,添加都不在适当位置,因此如果您想保留结果,请将其分配回来

r = df.sum(1)