堆叠一些数据框列
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.merge
、pd.melt
、pd.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
我的 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.merge
、pd.melt
、pd.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