【发布时间】:2018-05-29 18:51:37
【问题描述】:
我有 2 个数据框
数据框 1
一年一度的格莱美
数据框2
一年一度的格莱美歌曲
如果年度格莱美匹配,我想在 Dataframe 2 中获取 Dataframe 1 的索引作为新列。需要合并吗?
【问题讨论】:
我有 2 个数据框
数据框 1
一年一度的格莱美
数据框2
一年一度的格莱美歌曲
如果年度格莱美匹配,我想在 Dataframe 2 中获取 Dataframe 1 的索引作为新列。需要合并吗?
【问题讨论】:
假设你有
df1 = df1 = pd.DataFrame({"annualGrammy":[11,12,13,14,15,16,17,18]}, index=["i1","i2", "i3","i4","i5","i6","i7","i8"])
df2 = pd.DataFrame({"annualGrammy":[11,16,17,110,111], "song": ["a","b","c","d","e"]})
这样
df1.reset_index()
annualGrammy index
0 11 i1
1 12 i2
2 13 i3
3 14 i4
4 15 i5
5 16 i6
6 17 i7
7 18 i8
和
df2
annualGrammy song
0 11 a
1 16 b
2 17 c
3 110 d
4 111 e
您可以使用how="left" 合并以跟踪df1 上的索引:
pd.merge(df1, df2, on="annualGrammy", how="left")
index annualGrammy song
0 i1 11 a
1 i2 12 NaN
2 i3 13 NaN
3 i4 14 NaN
4 i5 15 NaN
5 i6 16 b
6 i7 17 c
7 i8 18 NaN
所有NaNs 都是在ag 中不匹配的值。您可以删除它们以仅获取重要的值
pd.merge(df1, df2, on="annualGrammy", how="left").dropna()
annualGrammy index song
0 11 i1 a
5 16 i6 b
6 17 i7 c
【讨论】:
如果df1 中的annualGrammy 是唯一的,您还可以使用map 在df2 中创建一个新列。使用RafaelC提供的数据
import pandas as pd
dct = pd.Series(df1.index.values, df1.annualGrammy.values).to_dict()
df2['index'] = df2.annualGrammy.map(dct)
df2 = df2.dropna()
df2 现在是
annualGrammy song index
0 11 a i1
1 16 b i6
2 17 c i7
【讨论】: