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)
'''
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'}))