大家好!请帮忙。我有这个数据框:
df = pd.DataFrame({
'sku_sellout': ['a', 'a', 'b', 'c', 'a'],
'labels': ['менее 100%', '100-200%', 'более 200%', 'более 200%', 'менее 100%'],
'price': [100, 200, 300, 1000, 100],
'ranges': ['0-100', '100-200', '200-300', '900-1000', '0-100'],
'rur_extr': [1, 2, 3, 4, 1],
'qnt_extr': [10, 20, 30, 40, 15]
})
sku_售完 | 标签 | 价格 | 范围 | 鲁尔外部 | qnt_extr |
---|---|---|---|---|---|
一个 | 低于100% | 100 | 0-100 | 1 | 10 |
一个 | 100-200% | 200 | 100-200 | 2 | 20 |
乙 | 超过200% | 300 | 200-300 | 3 | 30 |
c | 超过200% | 1000 | 900-1000 | 4 | 40 |
一个 | 低于100% | 100 | 0-100 | 1 | 15 |
我需要从中得到这个:
df2 = pd.DataFrame({
'sku_sellout': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
'metrics':['ranges', 'rur_extr','qnt_extr','ranges', 'rur_extr','qnt_extr','ranges', 'rur_extr','qnt_extr'],
'менее 100%': ['0-100',2,25,None,None,None,None,None,None],
'100-200%': ['100-200%',2,20,None,None,None,None,None,None],
'более 200%': [None,None,None,'200-300',3,30,'900-1000',4,40]
})
sku_售完 | 指标 | 低于100% | 100-200% | 超过200% |
---|---|---|---|---|
一个 | 范围 | 0-100 | 100-200% | 没有任何 |
一个 | 鲁尔外部 | 2 | 2 | 没有任何 |
一个 | qnt_extr | 25 | 20 | 没有任何 |
乙 | 范围 | 没有任何 | 没有任何 | 200-300 |
乙 | 鲁尔外部 | 没有任何 | 没有任何 | 3 |
乙 | qnt_extr | 没有任何 | 没有任何 | 30 |
c | 范围 | 没有任何 | 没有任何 | 900-1000 |
c | 鲁尔外部 | 没有任何 | 没有任何 | 4 |
c | qnt_extr | 没有任何 | 没有任何 | 40 |
那些。本质如下 - 行中有测量 sku_sellout 和指标(ranges、rur_extr、qnt_extr),列中有标签的值。十字路口处有:
- 如果是rur_extr或qnt_extr,则对应字段的和。
- 如果这是范围,则为此 sku_sellout 和标签找到的第一个值 (aggfunc='first') - 它将始终相同。
我通过melt 和pivot_table 完成了此操作,但无法将条件逻辑应用于该列:应用“first”或“sum”。