如何在Pandas DataFrame中根据指定列值查找同行对应值
嗨,我来帮你搞定这个Pandas的取值问题!先把你的示例DataFrame还原出来,方便后续演示:
import pandas as pd data = { 'Time': [00000.0, 00001.0, 00002.0, 00003.0, 00004.0, 00005.0, 00006.0, 00007.0, 00008.0, 00009.0, 00010.0, 00011.0, 00013.0, 00014.0, 00015.0, 00016.0, 00017.0, 00018.0], 'P': [1004.6, 1004.2, 1003.5, 1002.8, 1002.0, 1001.4, 1000.3, 999.5, 998.9, 998.0, 997.3, 996.9, 995.3, 994.6, 994.3, 993.6, 992.5, 991.8], 'T': [12.2, 12.1, 11.9, 12.0, 12.1, 12.1, 12.2, 12.1, 12.2, 12.1, 13.1, 13.2, 13.3, 13.6, 13.5, 13.5, 13.3, 13.3], 'R': [96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 96, 96, 96], 'H': [12, 15, 21, 27, 34, 39, 48, 55, 59, 67, 73, 76, 90, 96, 98, 104, 114, None] } df = pd.DataFrame(data)
下面分几种常用场景,教你怎么根据列值查找对应行的其他数据:
1. 根据单列指定值,获取该行的全部或指定列数据
比如想找Time为00010.0时对应的P和T值,有两种常用方法:
方法一:用.loc(最直观,新手友好)
.loc可以通过布尔条件定位行,还能直接指定要提取的列:
# 获取匹配行的全部数据 result_row = df.loc[df['Time'] == 00010.0] print(result_row) # 只提取指定列(比如P和T) result_cols = df.loc[df['Time'] == 00010.0, ['P', 'T']] print(result_cols) # 确定只有一行的话,还可以直接拿标量值 p_value = df.loc[df['Time'] == 00010.0, 'P'].iloc[0] t_value = df.loc[df['Time'] == 00010.0, 'T'].iloc[0] print(f"对应的P值:{p_value},T值:{t_value}")
方法二:布尔索引直接筛选
写法更简洁,本质和.loc逻辑一致:
# 先筛选出匹配的行 filtered_df = df[df['Time'] == 00010.0] # 再提取需要的列 print(filtered_df[['P', 'R', 'H']])
2. 处理多个匹配行的情况
如果指定列的值有重复(比如R列的96出现很多次),上面的方法会返回所有匹配行,你可以直接转成列表或者进一步处理:
# 获取所有R=96的行的H列数据 h_values = df[df['R'] == 96]['H'].tolist() print(f"所有R=96对应的H值:{h_values}")
3. 频繁查询的优化:把列设为索引
如果需要反复根据某一列的值查询,建议把该列设为DataFrame的索引,查询速度会快很多:
# 将Time列设置为索引 df_indexed = df.set_index('Time') # 直接通过索引取值,一步到位 p_value = df_indexed.loc[00010.0, 'P'] print(f"Time=00010.0对应的P值:{p_value}") # 要是需要恢复原结构,重置索引就行 df_indexed = df_indexed.reset_index()
这些方法基本能覆盖你的查询需求啦,根据自己的场景选合适的用就好~
内容的提问来源于stack exchange,提问作者Jonathon
相关产品推荐
相关产品推荐

