python合并两个dataframe_python-将多个DataFrame列合并为一个

The pandas.melt function的功能类似于您想要的:

pd.melt(df, id_vars=['weight'], value_vars=['a1_P', 'a2_P'], value_name='P')

weight variable P

0 14733.23 a1_P 33297.81

1 86954.04 a1_P 58895.18

2 14733.23 a2_P 17407.93

3 86954.04 a2_P 43013.57

当然,通过在melt语句的末尾附加.sort(‘P’)可以很容易地完成P的排序.

pd.melt(df, id_vars=['weight'], value_vars=['a1_P', 'a2_P'], value_name='P').sort('P')

weight variable P

2 14733.23 a2_P 17407.93

0 14733.23 a1_P 33297.81

3 86954.04 a2_P 43013.57

1 86954.04 a1_P 58895.18

如果您想超级动态,也许可以通过这种奇特的方式生成value_vars:

n_values = 2

value_vars = ["a{}_P".format(i+1) for i in range(0, n_values)]

pd.melt(df, id_vars=['weight'], value_vars=value_vars, value_name='P').sort('P')

若要使索引为[0、1、2、3 …],只需将.reset_index(drop = True)用作链接事件,或类似这样:

df = pd.melt(df, id_vars=['weight'], value_vars=value_vars, value_name='P')

df.sort(inplace=True)

df.reset_index(drop=True, inplace=True)

我个人更喜欢就地操作,因为它们的内存效率更高.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值