如何同时熔化 2 根柱子?
Posted
技术标签:
【中文标题】如何同时熔化 2 根柱子?【英文标题】:How to melt 2 columns at the same time? 【发布时间】:2019-09-10 00:04:49 【问题描述】:在 Pandas 中,我有以下数据框:
id1 id2 t1 l1 t2 l2
0 1 2 a b c d
1 3 4 g h i j
我想一次熔化两列。也就是说,期望的输出是:
id1 id2 tz lz
0 1 2 a b
1 1 2 c d
2 3 4 g h
3 3 4 i j
我知道标准熔化:
d.melt(id_vars=['id1', 'id2'],
value_vars=['t1', 't2', 'l1', 'l2'])
但这会堆叠所有列
id1 id2 variable value
0 1 2 t1 a
1 3 4 t1 g
2 1 2 t2 c
3 3 4 t2 i
4 1 2 l1 b
5 3 4 l1 h
6 1 2 l2 d
7 3 4 l2 j
我怎样才能同时熔化两列?比如:
d.melt(id_vars=['id1', 'id2'],
value_vars=('t1', 'l1'): 'tz', ('t2', 'l2'): 'lz')
会很棒。
【问题讨论】:
【参考方案1】:这是wide_to_long
pd.wide_to_long(df,['t','l'],i=['id1','id2'],j='drop').reset_index(level=[0,1])
Out[52]:
id1 id2 t l
drop
1 1 2 a b
2 1 2 c d
1 3 4 g h
2 3 4 i j
【讨论】:
哪个部分使它选择(t1,l1)和(t2,l2),而不是(t1,t2)和(l1,l2)。它是否取决于列在数据框中出现的顺序?如果是这样,我可以指定顺序吗?谢谢。 @hyperio pandas.pydata.org/pandas-docs/stable/reference/api/…,它是 stubnames【参考方案2】:您可以在这里使用melt
两次,然后将它们连接起来以获得所需的输出:
t = d.melt(id_vars=['id1', 'id2'], value_vars=['t1', 't2'], value_name='tz').drop('variable', axis=1)
l = d.melt(id_vars=['id1', 'id2'], value_vars=['l1', 'l2'], value_name='lz').iloc[:, -1:]
df = pd.concat([t, l], axis=1).sort_values('id1')
输出
print(df)
id1 id2 tz lz
0 1 2 a b
2 1 2 c d
1 3 4 g h
3 3 4 i j
【讨论】:
以上是关于如何同时熔化 2 根柱子?的主要内容,如果未能解决你的问题,请参考以下文章