Python-将值从数据框追加到相应的元组元素

时间:2019-06-11 16:17:57

标签: python pandas dataframe tuples

假设我有一个像这样的数据框:

Name | Level
Jack    1
John    2
Mike    1
Mark    2

经过一番处理后,我得到了Names对元组的随机列表:

[('Jack','Mark'),('Jack','John'),('Mark','Mike')]

是否可以返回元组中每个元素的Level。例如:

[('Jack','Mark',1,2),('Jack','John',1,2),('Mark','Mike',2,1)]

或采用元组内部元素之间的区别?:

[('Jack','Mark',-1),('Jack','John',-1),('Mark','Mike',1)]

我可能已经陷进了一个洞,我正在寻找挖洞的机会。

2 个答案:

答案 0 :(得分:1)

d = df.set_index('Name').Level

dict.get

d = dict(zip(df.Name, df.Level)也可以使用:a = [('Jack','Mark'),('Jack','John'),('Mark','Mike')] [t + tuple(map(d.get, t)) for t in a] [('Jack', 'Mark', 1, 2), ('Jack', 'John', 1, 2), ('Mark', 'Mike', 2, 1)]

[t + (d[t[0]] - d[t[1]],) for t in a]

[('Jack', 'Mark', -1), ('Jack', 'John', -1), ('Mark', 'Mike', 1)]

"run 32 bit" = false

答案 1 :(得分:0)

df = pd.DataFrame(
    data={
        'Name': ['Jack', 'John', 'Mike', 'Mark'],
        'Level': [1, 2, 3, 4]
    }
)

pairs = [('Jack','Mark'),('Jack','John'),('Mark','Mike')]

def get_level(df, name):
    return df[df['Name'] == name]['Level'].values[0]
new_pairs = []

for pair in pairs:
    new_pairs.append(
        (
            pair[0], pair[1], get_level(df, pair[0]), get_level(df, pair[1])
        )
    )