如何利用DataFrame一列的值访问另一列?如何逐行获取值'bleh'?
用一列的值访问另一列的值,以及提取特定值'bleh'
我来一步步帮你解决这个问题~首先咱们先明确场景:假设你有一个DataFrame,其中一列存储的是其他列的名称,你想通过这列的每个值,去对应提取另一列(或其他列)的该行数据,之后还要筛选出值为bleh的结果。
第一步:构造正确的DataFrame
你提到之前构造DF时多了一层[],那咱们先给出一个正确的示例DF:
import pandas as pd df = pd.DataFrame({ 'target_col': ['data_col1', 'data_col2', 'data_col1', 'data_col3'], 'data_col1': ['apple', 'banana', 'bleh', 'cherry'], 'data_col2': ['dog', 'bleh', 'cat', 'elephant'], 'data_col3': ['red', 'blue', 'green', 'yellow'] })
这里target_col列存的是要访问的列名,data_col1/data_col2/data_col3是存储实际数据的列。
第二步:用一列的值访问另一列的值
要实现这个需求,最直接的方式是用apply结合lambda函数,指定按行处理(axis=1):
# 提取每行根据target_col指定的列的值 df['extracted_value'] = df.apply(lambda row: row[row['target_col']], axis=1)
执行后,DF会新增一列extracted_value,里面就是每行根据target_col的列名提取到的数据。
第三步:逐行获取值'bleh'
现在要筛选出extracted_value中等于bleh的行,或者直接提取这些bleh值:
- 方式一:筛选出包含
bleh的行
bleh_rows = df[df['extracted_value'] == 'bleh']
- 方式二:直接提取所有
bleh值组成的Series
bleh_values = df.loc[df['extracted_value'] == 'bleh', 'extracted_value']
补充:更高效的替代方法(避免apply)
如果你的DF数据量很大,apply的效率可能偏低,这时可以用以下更高效的方式:
# 使用numpy索引实现高效提取 df['extracted_value'] = df.values[df.index, df.columns.get_indexer(df['target_col'])]
这样就能完美实现你的需求啦~
内容的提问来源于stack exchange,提问作者user189035
相关产品推荐
相关产品推荐

