使用 Pandas 计算 DataFrame 列标题包含 'cell' 的列并生成新列
假设有以下 DataFrame:
| | A | B_cell_1 | B_cell_2 | C_cell_1 | |---|-----|----------|----------|----------| | 0 | 10 | 2 | 3 | 4 | | 1 | 20 | 4 | 6 | 8 | | 2 | 30 | 6 | 9 | 12 |
我们需要计算 A 列除以列标题中含有 'cell' 的列,生成新列后在后面加上 'dq/dv'。
首先,我们可以使用 pandas 的 filter 方法选择列标题中含有 'cell' 的列:
cell_cols = df.filter(like='cell').columns
这将返回一个包含所有列标题中含有 'cell' 的列名称的列表:
Index(['B_cell_1', 'B_cell_2', 'C_cell_1'], dtype='object')
接下来,我们可以使用 pandas 的 div 方法以 A 列为分子,以 cell_cols 中的列为分母,计算出每一行的结果:
result = df['A'].div(df[cell_cols])
这将返回一个包含每一行计算结果的 DataFrame:
| | B_cell_1 | B_cell_2 | C_cell_1 | |---|----------|----------|----------| | 0 | 5 | 3.333333 | 2.5 | | 1 | 5 | 3.333333 | 2.5 | | 2 | 5 | 3.333333 | 2.5 |
最后,我们可以将这个结果 DataFrame 与原始 DataFrame 进行合并,并在新列后面加上 'dq/dv':
df = pd.concat([df, result.rename(columns=lambda x: x+'_dq/dv')], axis=1)
这将返回一个新的 DataFrame:
| | A | B_cell_1 | B_cell_2 | C_cell_1 | B_cell_1_dq/dv | B_cell_2_dq/dv | C_cell_1_dq/dv | |---|-----|----------|----------|----------|----------------|----------------|----------------| | 0 | 10 | 2 | 3 | 4 | 5 | 3.333333 | 2.5 | | 1 | 20 | 4 | 6 | 8 | 5 | 3.333333 | 2.5 | | 2 | 30 | 6 | 9 | 12 | 5 | 3.333333 | 2.5 |
原文地址: https://www.cveoy.top/t/topic/nwDm 著作权归作者所有。请勿转载和采集!