如何在DataFrame中按父项匹配值填充子项的Time列?
解决方法:将父项Time值填充至同组所有子项
方法一:使用groupby + transform
先创建DataFrame,再按Parent分组,提取每个组中有效Time值(即Parent与Child匹配的行的Time),并将该值填充到整个组的Time列:
import pandas as pd data = { 'Parent' : ['a123', 'a123', 'a123', 'a123', 'a234', 'a234', 'a234', 'a234'], 'Child' : ['a123', 'a1231', 'a1232', 'a1233', 'a2341', 'a234', 'a2342', 'a2343'], 'Time' : [51, 0, 0, 0, 0, 39, 0, 0], } df = pd.DataFrame(data) # 按Parent分组,将每个组的Time列替换为该组的有效Time值 df['Time'] = df.groupby('Parent')['Time'].transform(lambda x: x[x != 0].iloc[0])
方法二:构建映射表后批量替换
先提取每个Parent对应的有效Time值,再通过map方法将值批量映射到原DataFrame:
import pandas as pd data = { 'Parent' : ['a123', 'a123', 'a123', 'a123', 'a234', 'a234', 'a234', 'a234'], 'Child' : ['a123', 'a1231', 'a1232', 'a1233', 'a2341', 'a234', 'a2342', 'a2343'], 'Time' : [51, 0, 0, 0, 0, 39, 0, 0], } df = pd.DataFrame(data) # 提取Parent与Child匹配的行,构建Parent到Time的映射 parent_time_map = df[df['Parent'] == df['Child']].set_index('Parent')['Time'] # 将映射值批量填充到Time列 df['Time'] = df['Parent'].map(parent_time_map)
验证结果
执行上述任意一种方法后,打印df即可得到预期结果:
Parent Child Time 0 a123 a123 51 1 a123 a1231 51 2 a123 a1232 51 3 a123 a1233 51 4 a234 a2341 39 5 a234 a234 39 6 a234 a2342 39 7 a234 a2343 39
内容的提问来源于stack exchange,提问作者Josh L
相关产品推荐
相关产品推荐

