熊猫融化以获得多个变量和值列

问题描述 投票:1回答:3

我有一个Pandas DataFrame

data = {
"SomeCol":[1,2],
"Group1":['x','y'],
"Group2":['a','b'],
"SomeAgg":[100,200]
}
df = pd.DataFrame(data)

   SomeCol Group1 Group2  SomeAgg
0        1      x      a      100
1        2      y      b      200

我怎么能得到这个:

   SomeCol    Var1    Var2 Var1_value Var2_value  SomeAgg
0        1  Group1  Group2          x          a      100
1        2  Group1  Group2          y          b      200

我尝试过pd.melt函数,它只给出一个变量和一个值列。

任何帮助,将不胜感激

python pandas
3个回答
1
投票

也可以在不使用pd.melt的情况下实现解决方案:

data = {
"SomeCol":[1,2],
"Group1":['x','y'],
"Group2":['a','b'],
"SomeAgg":[100,200]
}
df = pd.DataFrame(data)
col_names = ['Group1', 'Group2']
df['Var1'], df['Var2'] = col_names[0], col_names[1]
df = df.rename(columns={col_names[0]: 'Var1_Value', col_names[1]: 'Var2_Value'})

print(df)

   SomeCol Var1_Value Var2_Value  SomeAgg    Var1    Var2
0        1          x          a      100  Group1  Group2
1        2          y          b      200  Group1  Group2

0
投票

我想你正试图多指数。此代码直接来自文档: https://pandas.pydata.org/pandas-docs/stable/user_guide/cookbook.html#cookbook-multi-index

   row  One_X  One_Y  Two_X  Two_Y
0    0    1.1    1.2   1.11   1.22
1    1    1.1    1.2   1.11   1.22
2    2    1.1    1.2   1.11   1.22

# As Labelled Index
In [76]: df = df.set_index('row')

In [77]: df
Out[77]: 
     One_X  One_Y  Two_X  Two_Y
row                            
0      1.1    1.2   1.11   1.22
1      1.1    1.2   1.11   1.22
2      1.1    1.2   1.11   1.22

# With Hierarchical Columns
In [78]: df.columns = pd.MultiIndex.from_tuples([tuple(c.split('_'))
   ....:                                         for c in df.columns])
   ....: 

In [79]: df
Out[79]: 
     One        Two      
       X    Y     X     Y
row                      
0    1.1  1.2  1.11  1.22
1    1.1  1.2  1.11  1.22
2    1.1  1.2  1.11  1.22

0
投票
import pandas as pd

data = {
"SomeCol":[1,2],
"Group1":['x','y'],
"Group2":['a','b'],
"SomeAgg":[100,200]
}
df = pd.DataFrame(data)

s1 = df.melt(id_vars=['SomeCol','SomeAgg'], value_vars=['Group1'],var_name='Var1', value_name='Var1_value')
s2 = df.melt(id_vars=['SomeCol'], value_vars=['Group2'],var_name='Var2', value_name='Var2_value')
ls = ['SomeCol','Var1','Var1','Var1_value', 'Var2_value','SomeAgg']
result = s1.merge(s2,on='SomeCol')
print(result[ls])
© www.soinside.com 2019 - 2024. All rights reserved.