import pandas as pd
'''
df
zq area province
北一战区 北京区 北京
北一战区 华北区 河北
北一战区 华北区 天津
北一战区 东北区 黑龙江
北一战区 东北区 吉林
'''
def group_concat(df):
df['province'] = ','.join(set(df['province']))
return df.drop_duplicates()#注意这里需要做一下去重
df.groupby(['zq','area'],group_keys=False,sort=False).apply(group_concat)
# 注意这里需要设置group_keys=False
'''
zq area province
北一战区 北京区 北京
北一战区 华北区 河北,天津
北一战区 东北区 黑龙江,辽宁,吉林
北二战区 晋蒙区 内蒙古,山西
北二战区 陕宁区 陕西,宁夏
北二战区 甘青新区 青海,新疆,甘肃
东一战区 河南区 河南
东一战区 山东区 山东
东二战区 苏沪区 江苏,上海
东二战区 浙皖区 浙江,安徽
南一战区 华南区 广西,海南,广东
'''
上述结果的反向操作
'''
df
zq area province
北一战区 北京区 北京
北一战区 华北区 河北,天津
北一战区 东北区 黑龙江,辽宁,吉林
北二战区 晋蒙区 内蒙古,山西
北二战区 陕宁区 陕西,宁夏
北二战区 甘青新区 青海,新疆,甘肃
东一战区 河南区 河南
东一战区 山东区 山东
东二战区 苏沪区 江苏,上海
东二战区 浙皖区 浙江,安徽
南一战区 华南区 广西,海南,广东
'''
df['province'].str.split(',',expand=True).stack().\
reset_index().set_index('level_0').drop('level_1',1).rename(columns={0:'province'}).\
join(df.drop('province',1))
'''
province zq area
北京 北一战区 北京区
河北 北一战区 华北区
天津 北一战区 华北区
黑龙江 北一战区 东北区
辽宁 北一战区 东北区
吉林 北一战区 东北区
'''
df.drop('province',1).join(df['province'].str.split(',',expand=True).stack().\
reset_index().set_index('level_0').drop('level_1',1).rename(columns={0:'province'}))