我有一个大型数据框,其中有一堆名称出现在两列中 其布局如下
Winner Value_W Loser Value_L
Jack 5 Sally -3
Sally 2 Max -1
Max 4 Jack -2
Lucy 1 Jack -6
Jack 6 Henry -3
Henry 5 Lucy -4
然后我使用以下代码过滤“Winner”和“Loser”列以获取 Jack 出现的所有行
pd.loc[(df['Winner'] == 'Jack') | (df['Loser'] == 'Jack')]
返回以下内容:
Winner Value_W Loser Value_L
Jack 5 Sally -3
Max 4 Jack -2
Lucy 1 Jack -6
Jack 6 Henry -3
我现在希望生成一个只有 Jack 及其对应值的列。 所以在这个例子中,我想要的输出是:
New_1 New_2
Jack 5
Jack -2
Jack -6
Jack 6
我不确定该怎么做。
最佳答案
您可以在稍微重命名列之后wide_to_long
。这使您可以捕获其他信息,例如该行是赢还是输。或者,如果您不在乎,请执行 df1 = df1.reset_index(drop=True)
d = {'Winner': 'Person_W', 'Loser': 'Person_L'}
df1 = pd.wide_to_long(df.rename(columns=d).reset_index(),
stubnames=['Person', 'Value'],
i='index',
j='Win_Lose',
sep='_',
suffix='.*')
df1[df1.Person == 'Jack']
# Person Value
#index Win_Lose
#0 W Jack 5
#4 W Jack 6
#2 L Jack -2
#3 L Jack -6
如果特定顺序很重要,我们仍然有原始索引:
df1.sort_index(level=0).query('Person == "Jack"').reset_index(drop=True)
# Person Value
#0 Jack 5
#1 Jack -2
#2 Jack -6
#3 Jack 6
关于python - Pandas :将两列合并为具有相应值的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58493848/