如何使用 pandas 取消旋转数据框
How to un-pivot a dataframe with pandas
例如,我有这样一个数据框
df = {'name':['Jennifer','Vivian','Trisha'],
'married':[1,1,0],
'Mon': [0, 0,1],
'Tu':[1,0,0],
'Wed':[0,1,0]}
我怎样才能像这样将虚拟变量合并到一列中:
我尝试使用 pd.melt() 但它只是将几列堆叠为一列并更改了列的长度。有人可以帮我吗?提前致谢!
这是一种方式。
res = pd.melt(df, id_vars=['married', 'name'], value_vars=['Mon', 'Tu', 'Wed'],
var_name='Workday')
res = res[res['value'] == 1].reset_index(drop=True)
d = {0: 'single', 1: 'married'}
res['married'] = res['married'].map(d)
print(res)
# married name Workday value
# 0 single Trisha Mon 1
# 1 married Jennifer Tu 1
# 2 married Vivian Wed 1
这应该有效:
df.replace({'married':{1:'Married', 0: 'Single'}}). \
melt(id_vars=['married', 'name'], var_name='Workday'). \
query('value == 1'). \
drop('value', axis=1)
# married name Workday
# 2 Single Trisha Mon
# 3 Married Jennifer Tu
# 7 Married Vivian Wed
例如,我有这样一个数据框
df = {'name':['Jennifer','Vivian','Trisha'],
'married':[1,1,0],
'Mon': [0, 0,1],
'Tu':[1,0,0],
'Wed':[0,1,0]}
我怎样才能像这样将虚拟变量合并到一列中:
我尝试使用 pd.melt() 但它只是将几列堆叠为一列并更改了列的长度。有人可以帮我吗?提前致谢!
这是一种方式。
res = pd.melt(df, id_vars=['married', 'name'], value_vars=['Mon', 'Tu', 'Wed'],
var_name='Workday')
res = res[res['value'] == 1].reset_index(drop=True)
d = {0: 'single', 1: 'married'}
res['married'] = res['married'].map(d)
print(res)
# married name Workday value
# 0 single Trisha Mon 1
# 1 married Jennifer Tu 1
# 2 married Vivian Wed 1
这应该有效:
df.replace({'married':{1:'Married', 0: 'Single'}}). \
melt(id_vars=['married', 'name'], var_name='Workday'). \
query('value == 1'). \
drop('value', axis=1)
# married name Workday
# 2 Single Trisha Mon
# 3 Married Jennifer Tu
# 7 Married Vivian Wed