如何通过 DataFrame 将一组多列转换为一组标记值,同时又不想转换所有列
How to pivot a set of multiple columns into a set of flagged values through DataFrame while not wanting to pivot all columns
所以,我有一个高级的关键问题。考虑以下数据框
dfa = pandas.DataFrame([["g1","15","Annie","Bard"], ["g2","18","Lux","Annie"], ["g3","15","Olaf","Twitch"]], columns=["gameId", "duration", "Champ1", "Champ2"])
这给出了输出:
通过应用以下堆栈溢出问题中的逻辑,,我得到
pandas.melt(dfa, id_vars=['gameId']) \
.set_index('gameId')['value'] \
.str.get_dummies() \
.groupby(level=0) \
.agg(np.sum)
但是,我不想旋转持续时间列,所以我更改了我的代码并添加了 'value_vars'
pandas.melt(dfa, id_vars=['gameId'], value_vars = ['Champ1','Champ2']) \
.set_index('gameId')['value'] \
.str.get_dummies() \
.groupby(level=0) \
.agg(np.sum)
现在我丢失了持续时间列。此列不是索引,因为它不是唯一的,但我不想旋转它。我已经尝试了将它添加到 'id_vars' 或 'set_index()' 的所有组合,但它似乎不起作用。
想法?
提前致谢!
您可以将列 duration
添加到 id_vars
,然后添加到 set_index
和最后 groupby
Multiindex
中的两个级别,如下所示:
a = pd.melt(dfa, id_vars=['gameId', 'duration']) \
.set_index(['gameId', 'duration'])['value'] \
.str.get_dummies()
.sum(level=[0,1])
print (a)
Annie Bard Lux Olaf Twitch
gameId duration
g1 15 1 1 0 0 0
g2 18 1 0 1 0 0
g3 15 0 0 0 1 1
什么相同:
a = pd.melt(dfa, id_vars=['gameId', 'duration']) \
.set_index(['gameId', 'duration'])['value'] \
.str.get_dummies() \
.groupby(level=[0,1]) \
.sum()
print (a)
Annie Bard Lux Olaf Twitch
gameId duration
g1 15 1 1 0 0 0
g2 18 1 0 1 0 0
g3 15 0 0 0 1 1
所以,我有一个高级的关键问题。考虑以下数据框
dfa = pandas.DataFrame([["g1","15","Annie","Bard"], ["g2","18","Lux","Annie"], ["g3","15","Olaf","Twitch"]], columns=["gameId", "duration", "Champ1", "Champ2"])
这给出了输出:
通过应用以下堆栈溢出问题中的逻辑,
pandas.melt(dfa, id_vars=['gameId']) \
.set_index('gameId')['value'] \
.str.get_dummies() \
.groupby(level=0) \
.agg(np.sum)
但是,我不想旋转持续时间列,所以我更改了我的代码并添加了 'value_vars'
pandas.melt(dfa, id_vars=['gameId'], value_vars = ['Champ1','Champ2']) \
.set_index('gameId')['value'] \
.str.get_dummies() \
.groupby(level=0) \
.agg(np.sum)
现在我丢失了持续时间列。此列不是索引,因为它不是唯一的,但我不想旋转它。我已经尝试了将它添加到 'id_vars' 或 'set_index()' 的所有组合,但它似乎不起作用。
想法?
提前致谢!
您可以将列 duration
添加到 id_vars
,然后添加到 set_index
和最后 groupby
Multiindex
中的两个级别,如下所示:
a = pd.melt(dfa, id_vars=['gameId', 'duration']) \
.set_index(['gameId', 'duration'])['value'] \
.str.get_dummies()
.sum(level=[0,1])
print (a)
Annie Bard Lux Olaf Twitch
gameId duration
g1 15 1 1 0 0 0
g2 18 1 0 1 0 0
g3 15 0 0 0 1 1
什么相同:
a = pd.melt(dfa, id_vars=['gameId', 'duration']) \
.set_index(['gameId', 'duration'])['value'] \
.str.get_dummies() \
.groupby(level=[0,1]) \
.sum()
print (a)
Annie Bard Lux Olaf Twitch
gameId duration
g1 15 1 1 0 0 0
g2 18 1 0 1 0 0
g3 15 0 0 0 1 1