堆叠一些数据框列

Stack some columns of dataframe

我的 pandas 数据框是这样的 table/image 下面:

product_id  product_name  package_mod  price  package_50g  price_50g  package_100g  price_100g
2017210     potato        1KG          3.39   50g          0.1695     100g          0.339
2017081     onion         1KG          3.59   50g          0.1795     100g          0.359
2017217     lemon         1KG          2.79   50g          0.1395     100g          0.279

我想要这个输出,通过 product_id 系列追加。

我几乎什么都试过了,比如pd.mergepd.meltpd.append

我知道我可以通过手动合并每个 product_id 来手动完成,但是我有几个这样的列,所以我认为这不是一个选项。

您正在寻找pd.wide_to_long

out = pd.wide_to_long(df.rename(columns={'price': 'price_mod'}),
                      stubnames=['package', 'price'],
                      i=['product_id', 'product_name'],
                      j='dummy', sep='_', suffix=r'\w+') \
        .droplevel(level='dummy').reset_index()

输出:

>>> out
   product_id product_name package   price
0     2017210       potato     1KG  3.3900
1     2017210       potato     50g  0.1695
2     2017210       potato    100g  0.3390
3     2017081        onion     1KG  3.5900
4     2017081        onion     50g  0.1795
5     2017081        onion    100g  0.3590
6     2017217        lemon     1KG  2.7900
7     2017217        lemon     50g  0.1395
8     2017217        lemon    100g  0.2790