我想知道我是否可以在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(列表)会非常大而且动态。谢谢!
答案 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)