python - Pandas :将两列合并为具有相应值的一列

标签 python pandas

我有一个大型数据框,其中有一堆名称出现在两列中 其布局如下

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/

相关文章:

python-2.7 - Pandas 在时间序列上滚动平均值

python - python中的唯一 session ID

python - Google App Engine Bulkloader appcfg.py download_data 与数据存储区备份实体按钮

pandas - 如何用多个 if-else 条件填充 nans?

Python 条件求和使用日期和条件

python - 选择特定列仅在 Python 中形成数据框

python - 根据多个数据帧的公共(public)时间戳创建数据帧

python - 想广泛了解Python中索引的用法

python - 将字典列表转换为字典字典的优雅方法

python - 如何从一组 GPS 点中获取 "fastest miles"的列表