我有一个看起来像这样的DataFrame:{"Val1": [...], "Val2": [...]}
我现在想要实现的是一个看起来像这样的DataFrame:
{
"Vals": [<should contain all vals from Val1 and Val2>],
"type": [<1 or 2 depending on the column from which
the corresponding value originated>]
}
我可以通过例如:
new = DataFrame({"vals": old.vals1.values + old.vals2.values,
"type": ([1] * len(old)) + ([2] * len(old))})
但是,这感觉很棘手,我想知道是否有使用熊猫方法的优雅单线。因为在我的实际问题中,该表又增加了4列,所以我的hacky解决方案变得非常密集。
编辑: 一个具体的例子是:
old = pd.DataFrame({"A": [2, 4, 5], "B": [1, 2, 3], "C":[4, 5, 6]})
new = pd.DataFrame({"A": [2, 4, 5, 2, 4, 5], "B and C": [1, 2, 3, 4, 5, 6], "type": (["B"] * 3) + (["C"] * 3)})
old:
A B C
0 2 1 4
1 4 2 5
2 5 3 6
new:
A B and C type
0 2 1 B
1 4 2 B
2 5 3 B
3 2 4 C
4 4 5 C
5 5 6 C
答案 0 :(得分:2)
说你有
df = pd.DataFrame({'val1':[1,2,3,4],'val2':[5,6,7,8]})
使用pd.melt()
,您将得到想要的东西:
df.melt(var_name='Type', value_name='vals')
Type vals
0 val1 1
1 val1 2
2 val1 3
3 val1 4
4 val2 5
5 val2 6
6 val2 7
7 val2 8
答案 1 :(得分:1)
import pandas as pd
datadict = {
'Val1': [1,3,5,7,9],
'Val2': [2,4,6,8,10],
}
df = pd.DataFrame(datadict)
df = pd.melt(df,var_name='Val')
print (df)
Val value
0 Val1 1
1 Val1 3
2 Val1 5
3 Val1 7
4 Val1 9
5 Val2 2
6 Val2 4
7 Val2 6
8 Val2 8
9 Val2 10