确定。我不知道如何实际问这个问题但是这里有。我有这样的数据框。
import pandas as pd
d = {'Product' : ['Product_A','Product_A', 'Product_B', 'Product_B'],'Country' : ["DE", "DE", "DE","DE"],'Billed_Week' : ['201652', '201701', '201652', '201701'],'Billings' : [1116, 9030, 7476, 2859]}
df = pd.DataFrame(d)
sequence = ['Product','Country','Billed_Week','Billings']
df = df.reindex(columns=sequence)
输出:
Product Country Billed_Week Billings
0 Product_A DE 201652 1116
1 Product_A DE 201701 9030
2 Product_B DE 201652 7476
3 Product_B DE 201701 2859
我需要再添加两列" Billed_Week_New"和" Billings_New"它们根据整个第一个数据帧的分组以重复格式添加值。因此,对于第一个数据帧的第一个记录,我需要扩展整个分组中的周数。我将只显示所需的输出。
需要输出:
Product Country Billed_Week Billings Billed_Week_New Billings_New
Product_A DE 201652 1116 201652 1116
Product_A DE 201652 1116 201701 9030
Product_A DE 201701 9030 201652 1116
Product_A DE 201701 9030 201701 9030
Product_B DE 201652 7476 201652 7476
Product_B DE 201652 7476 201701 2859
Product_B DE 201701 2859 201652 7476
Product_B DE 201701 2859 201701 2859
答案 0 :(得分:3)
考虑交叉连接,在列之间返回笛卡尔积(这些相同键之间的所有可能组合在 Product 和 Country ):
mdf = df.merge(df, on=['Product','Country']).\
rename(columns = {'Billed_Week_x': 'Billed_Week',
'Billings_x': 'Billings',
'Billed_Week_x':'Billed_Week_New',
'Billings_y':'Billings_New'})
print(mdf)
# Product Country Billed_Week Billings Billed_Week_New Billings_New
# 0 Product_A DE 201652 1116 201652 1116
# 1 Product_A DE 201652 1116 201701 9030
# 2 Product_A DE 201701 9030 201652 1116
# 3 Product_A DE 201701 9030 201701 9030
# 4 Product_B DE 201652 7476 201652 7476
# 5 Product_B DE 201652 7476 201701 2859
# 6 Product_B DE 201701 2859 201652 7476
# 7 Product_B DE 201701 2859 201701 2859