数据表新增ind1列需求:匹配同Ac1下ac2=000的ind值
嘿,我来帮你搞定这个数据表的需求!这里有两种实用的方法,分别用SQL和Python的Pandas库来实现,都能得到你想要的结果:
方法1:用SQL实现
核心思路是先把每个Ac1分组里ac2='000'对应的ind值提取出来,再把这个值关联回原表的每一行,作为ind1列。
WITH group_ind AS ( SELECT Ac1, ind AS group_ind_value FROM your_table -- 这里替换成你的实际表名 WHERE ac2 = '000' ) SELECT t.Ac1, t.ac2, t.name, t.ind, UPPER(g.group_ind_value) AS ind1 -- 统一转成大写,和示例输出格式匹配 FROM your_table t JOIN group_ind g ON t.Ac1 = g.Ac1;
简单解释下:
- 先通过CTE
group_ind拿到每个分组的基准值(也就是ac2=000的ind); - 再用
JOIN把这个基准值对应到同一Ac1的所有行,最后转大写保证格式和示例一致。
方法2:用Python Pandas实现
如果是用Python处理本地数据,这个方法会更灵活:
import pandas as pd # 先构造你的原始数据表(如果是从文件读取,替换成pd.read_csv之类的即可) data = { 'Ac1': [123, 123, 123, 123, 223, 223, 223, 234, 234], 'ac2': ['223', '000', '001', '002', '000', '001', '002', '001', '000'], 'name': ['john', 'john', 'john', 'roy', 'roy', 'roy', 'james', 'james', 'james'], 'ind': ['y', 'y', 'N', 'N', 'N', 'Y', 'y', 'y', 'y'] } df = pd.DataFrame(data) # 第一步:提取每个Ac1分组下ac2=000的ind值,转成大写后做成映射字典 ind_map = df[df['ac2'] == '000'].set_index('Ac1')['ind'].str.upper().to_dict() # 第二步:给原表新增ind1列,用Ac1去匹配映射字典里的值 df['ind1'] = df['Ac1'].map(ind_map) # 查看结果 print(df)
运行这段代码后,输出的结果就和你给出的示例完全一致啦!
内容的提问来源于stack exchange,提问作者JOHNPaul
相关产品推荐
相关产品推荐

