gpt4 book ai didi

python - 连接 Pandas 数据框中的所有列

转载 作者:太空狗 更新时间:2023-10-29 21:12:36 26 4
gpt4 key购买 nike

我有多个 pandas 数据框,它们可能有不同数量的列,这些列的数量通常在 50 到 100 之间变化。我需要创建一个最后一列,它只是所有列的连接。基本上,列第一行中的字符串应该是所有列第一行中字符串的总和(连接)。我在下面写了循环,但我觉得可能有更好更有效的方法来做到这一点。关于如何做到这一点的任何想法

num_columns = df.columns.shape[0]
col_names = df.columns.values.tolist()
df.loc[:, 'merged'] = ""
for each_col_ind in range(num_columns):
print('Concatenating', col_names[each_col_ind])
df.loc[:, 'merged'] = df.loc[:, 'merged'] + df[col_names[each_col_ind]]

最佳答案

解决方案 sum ,但输出是float,所以需要转换成intstr:

df['new'] = df.sum(axis=1).astype(int).astype(str)

另一种使用apply 函数join 的解决方案,但它是最慢的:

df['new'] = df.apply(''.join, axis=1)

最后一个非常快速的 numpy 解决方案 - 转换为 numpy array 然后 'sum' :

df['new'] = df.values.sum(axis=1)

时间:

df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['4', '5', '6'], 'C': ['7', '8', '9']})
#[30000 rows x 3 columns]
df = pd.concat([df]*10000).reset_index(drop=True)
#print (df)

cols = list('ABC')

#not_a_robot solution
In [259]: %timeit df['concat'] = pd.Series(df[cols].fillna('').values.tolist()).str.join('')
100 loops, best of 3: 17.4 ms per loop

In [260]: %timeit df['new'] = df[cols].astype(str).apply(''.join, axis=1)
1 loop, best of 3: 386 ms per loop

In [261]: %timeit df['new1'] = df[cols].values.sum(axis=1)
100 loops, best of 3: 6.5 ms per loop

In [262]: %timeit df['new2'] = df[cols].astype(str).sum(axis=1).astype(int).astype(str)
10 loops, best of 3: 68.6 ms per loop

编辑如果某些列的数据类型不是由DataFrame.astype 转换的object(显然是string) :

df['new'] = df.astype(str).values.sum(axis=1)

关于python - 连接 Pandas 数据框中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786804/

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