对奇怪的措辞表示歉意,不确定如何表达这个问题,但希望这个例子能表达出来。我有两个数据框,想要通过根据两个 df1 列中的值进行匹配,用 df2 中的值填充 df1 中的新列。问题是,在 df2 中,这些值之一不在列中,而是在列名称中。
df1
NAME YEAR
Anna 2002
Mary 2001
Paul 2000
Paul 2001
Mary 2002
Anna 2001
Anna 2000
Mary 2000
Paul 2002
df2
NAME 2000 2001 2002
Anna 5 4 3
Mary 3 2 5
Paul 2 3 4
expected result:
df1
NAME YEAR SCORE
Anna 2002 3
Mary 2001 2
Paul 2000 2
Paul 2001 3
Mary 2002 5
Anna 2001 4
Anna 2000 5
Mary 2000 3
Paul 2002 4
我可以合并 NAME 上的两个数据框,但这并不能解决我的问题,因为我只需添加三列。我想知道这是否需要一些 for 循环遍历列,但我是初学者,不确定我是否没有使事情变得过于复杂(并创建一个非常长的过程)。即使只是提示在文档中查找的位置也会非常有帮助!
尝试:
pd.melt(df2, id_vars=['NAME'], value_vars=['2000', '2001', '2002'])
这将给出:
NAME variable value
0 Anna 2000 5
1 Mary 2000 3
2 Paul 2000 2
3 Anna 2001 4
4 Mary 2001 2
5 Paul 2001 3
6 Anna 2002 3
7 Mary 2002 5
8 Paul 2002 4
现在您可以合并了
您还可以重命名列名称:
df2.rename(columns={'variable':'YEAR', 'value':'SCORE'})
或者,使用
.set_index()
/.stack()
:
print(
df2.set_index("NAME")
.stack()
.reset_index()
.rename(columns={0: "SCORE", "level_1": "YEAR"})
)
打印:
NAME YEAR SCORE
0 Anna 2000 5
1 Anna 2001 4
2 Anna 2002 3
3 Mary 2000 3
4 Mary 2001 2
5 Mary 2002 5
6 Paul 2000 2
7 Paul 2001 3
8 Paul 2002 4