擅长:python、mysql、java
<p>这是另一种应该有效的方法,但是使用重复的<code>melt</code>s</p>
<pre><code>coln = df.dtypes.index # save some typing
df_long = pd.melt(
df, id_vars = "custid", value_vars = ["prod1", "prod2"],
var_name = "prod", value_name = "rec").assign(
hnode1 = pd.melt(df, id_vars = "custid",
value_vars = filter(lambda x: "hnode1" in x, coln))["value"],
hnode2 = pd.melt(df, id_vars = "custid",
value_vars = filter(lambda x: "hnode2" in x, coln))["value"])
print(df_long)
custid prod rec hnode1 hnode2
0 1 prod1 jeans 1 6
1 2 prod1 tshirt 2 7
2 3 prod1 jacket 3 8
3 4 prod1 tshirt 2 7
4 1 prod2 tshirt 2 7
5 2 prod2 jeans 1 6
6 3 prod2 jacket 3 8
7 4 prod2 shirt 4 7
</code></pre>
<hr/>
<p>你在评论中提到了R。<code>melt</code>来自“数据表“应该能够更容易地处理这一问题,因为您可以一次熔化多组列,这与使用baser的<code>reshape</code>函数类似。在</p>
<p>基本R方法可能大致如下:</p>
^{pr2}$