假设我们有四列: Column1,Column2,Column3,ind
import pandas as pd
tbl = {
'Column1':['Spark',10000,'Python','35days'],
'Column2' :[500,'PySpark',22000,30000],
'Column3':['30days','40days','35days','pandas'],
'ind':[1,2,1,3]
}
df = pd.DataFrame(tbl)有没有人知道是否有一种方法可以添加一个没有循环的新列,它将根据存储在'ind‘列中的索引从前3列收集值?
“课程”:“火花”、“火种”、“Python”、“熊猫”
我尝试了一些与iloc,lambda和combinations的组合,但都失败了。
预期产出:
Column1 Column2 Column3 ind Course
0 Spark 500 30days 1 Spark
1 10000 PySpark 40days 2 PySpark
2 Python 22000 35days 1 Python
3 35days 30000 pandas 3 pandas发布于 2022-05-20 15:15:42
为了提高效率,请使用正式的按索引/列标签查找
import numpy as np
idx, cols = pd.factorize('Column'+df['ind'].astype(str))
df['Course'] = df.reindex(cols, axis=1).to_numpy()[np.arange(len(df)), idx]产出:
Column1 Column2 Column3 ind Course
0 Spark 500 30days 1 Spark
1 10000 PySpark 40days 2 PySpark
2 Python 22000 35days 1 Python
3 35days 30000 pandas 3 pandas时差
在40k行上执行
# lookup (this answer)
25.6 ms ± 2.26 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# apply
722 ms ± 48.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)https://stackoverflow.com/questions/72321110
复制相似问题