gpt4 book ai didi

python - 迭代地将第一列中的文本与其他列中的现有文本组合

转载 作者:行者123 更新时间:2023-12-02 18:59:26 26 4
gpt4 key购买 nike

我正在创建一个 python 脚本,该脚本从我们研究实验室内的一台设备中设计不良的输出文件(我无法更改)中提取数据。我想提供一种将数据帧第一列中的文本(下面的示例)与数据帧中的每个其他列迭代组合的方法。

数据框的简单示例:

<表类=“s-表”><标题>文件名12345 <正文>一个工作表(1)工作表(2)工作表(3)工作表(4)....b工作表(1)工作表(2)----------------....c工作表(1)工作表(2)工作表(3)工作表(4)....d工作表(1)工作表(2)工作表(3)--------....e工作表(1)工作表(2)工作表(3)工作表(4)....f工作表(1)------------------------....

我想要生产什么:

<表类=“s-表”><标题>文件名12345 <正文>一个a_Sheet(1)a_Sheet(2)a_Sheet(3)a_Sheet(4)....bb_Sheet(1)b_Sheet(2)----------------....cc_Sheet(1)c_Sheet(2)c_Sheet(3)c_Sheet(4)....dd_Sheet(1)d_Sheet(2)d_Sheet(3)--------....e电子表(1)电子表(2)电子表(3)电子表(4)....ff_Sheet(1)------------------------....

最佳答案

  • 使用 .apply'Filename' 字符串添加到其他列的前面。
  • 在当前答案中,解决方案来自 Mykola Zotko是最快的解决方案,针对 10 万行的 3 列数据框进行了测试。
  • 如果您的数据框包含不需要的字符串(例如 '--------'),则使用类似 df.replace('-------- -', pd.NA, inplace=True),在组合列字符串之前。
    • 如果最终结果必须有'--------',则使用df.fillna('--------', inplace=True ) 最后。这比尝试迭代地处理它们要好。
import pandas as pd
import numpy as np

# test dataframe
df = pd.DataFrame({'Filename': ['a', 'b', 'c'], 'c1': ['s1'] * 3, 'c2': ['s2', np.nan, 's2']})

# display(df)
Filename c1 c2
0 a s1 s2
1 b s1 NaN
2 c s1 s2

# prepend the filename strings to the other columns
df.iloc[:, 1:] = df.iloc[:, 1:].apply(lambda x: df.Filename + '_' + x)

# display(df)
Filename c1 c2
0 a a_s1 a_s2
1 b b_s1 NaN
2 c c_s1 c_s2

%%timeit 对照其他答案进行测试

# test data with 100k rows
df = pd.concat([pd.DataFrame({'Filename': ['a', 'b', 'c'], 'c1': ['s1'] * 3, 'c2': ['s2'] * 3})] * 33333).reset_index(drop=True)

# Solution from Trenton
%%timeit
df.iloc[:, 1:].apply(lambda x: df.Filename + '_' + x)
[out]:
33.6 ms ± 1.17 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

# Solution from Mykola
%%timeit
df['Filename'].to_numpy().reshape(-1, 1) + '_' + df.loc[:, 'c1':]
[out]:
29.6 ms ± 2.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

# Solution from Alex
%%timeit
df.loc[:, cols].apply(lambda s: df["Filename"].str.cat(s, sep="_"))
[out]:
45.3 ms ± 1.08 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

# iterating the columns in a for-loop
def test(d):
for cols in d.columns[1:]:
d[cols]=d['Filename'] + '_' + d[cols]
return d

%%timeit
test(df)
[out]:
53.8 ms ± 4.75 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - 迭代地将第一列中的文本与其他列中的现有文本组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65769014/

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