我有一个数据帧df(参见下面的程序),其列名和数字不固定。 但是,有一个列表ls将具有需要附加在一起的df列的列表。 我试过了
df['combined'] = df[ls].apply(lambda x: '{}{}{}'.format(x[0], x[1], x[2]), axis=1)
但是在这里我假设列表ls有3个元素是硬编码和不正确的。如果列表有10个元素那么...我想动态读取列表并附加数据帧的列。
import pandas as pd
def main():
df = pd.DataFrame({
'col_1': [0, 1, 2, 3],
'col_2': [4, 5, 6, 7],
'col_3': [14, 15, 16, 19],
'col_4': [22, 23, 24, 25],
'col_5': [30, 31, 32, 33],
})
ls = ['col_1','col_4', 'col_3']
df['combined'] = df[ls].apply(lambda x: '{}{}'.format(x[0], x[1]), axis=1)
print(df)
if __name__ == '__main__':
main()
答案 0 :(得分:3)
转换列后,您可以使用''.join
'数据类型为 str :
df[ls].astype(str).apply(''.join, axis=1)
#0 02214
#1 12315
#2 22416
#3 32519
#dtype: object
答案 1 :(得分:0)
为了更快的速度,您可以对字符串使用累积和,即
df[ls].astype(str).cumsum(1).iloc[:,-1].values
输出:
0 02214 1 12315 2 22416 3 32519 Name: combined, dtype: object
如果您需要添加空格,请先添加' '
,然后找到总和,即
n = (df[ls].astype(str)+ ' ').sum(1)
0 0 22 14 1 1 23 15 2 2 24 16 3 3 25 19 dtype: object
时间:
ndf = pd.concat([df]*10000)
%%timeit
ndf[ls].astype(str).cumsum(1).iloc[:,-1].values
1 loop, best of 3: 538 ms per loop
%%timeit
ndf[ls].astype(str).apply(''.join, axis=1)
1 loop, best of 3: 1.93 s per loop