gpt4 book ai didi

python - 如何比较两个数据帧的列并在它们在 Python Pandas 中匹配时产生结果

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:12 26 4
gpt4 key购买 nike

我试图让 Python Pandas 相互比较两个数据帧。在数据帧 1 中,我有两列(AC-Cat 和 Origin)。我正在尝试将 AC-Cat 列与 Dataframe 2 的输入进行比较。如果在 Dataframe 2 的某一列与正在研究的 Dataframe 1 的值之间找到匹配项,我希望 Pandas 复制该列的标题Dataframe 2,其中发现与 Dataframe 1 中的新列匹配。

DF1:

f = {'AC-Cat': pd.Series(['B737', 'A320', 'MD11']),
'Origin': pd.Series(['AJD', 'JFK', 'LRO'])}
Flight_df = pd.DataFrame(f)

DF2:

w = {'CAT-C': pd.Series(['DC85', 'IL76', 'MD11', 'TU22', 'TU95']),
'CAT-D': pd.Series(['A320', 'A321', 'AN12', 'B736', 'B737'])}
WCat_df = pd.DataFrame(w)

我将 pandas 导入为 pd,将 numpy 导入为 np,并尝试定义一个函数来比较这些列。

def get_wake_cat(AC_cat):
try:
Wcat = [WCat_df.columns.values[0]][WCat_df.iloc[:,1]==AC_cat].values[0]
except:
Wcat = np.NAN
return Wcat

Flight_df.loc[:,'CAT'] = Flight_df.loc[:,'AC-Cat'].apply(lambda CT: get_wake_cat(CT))

但是,该函数不会产生所需的输出。例如:采用 B737 AC-Cat 值。我希望 Python Pandas 在 DF2 的 CAT-D 列中找到该值,并将该 header 复制到 DF 1 的新列。这种情况不会发生。有人可以帮我找出为什么我的代码没有给出预期的结果吗?

最佳答案

不太漂亮,但我想我已经成功了。部分错误是该函数没有 WCat_df。我还将索引改为两步:

def get_wake_cat(AC_cat, WCat_df):
try:
d=WCat_df[WCat_df.columns.values][WCat_df.iloc[:]==AC_cat]
Wcat=d.columns[(d==AC_cat).any()][0]
except:
Wcat = np.NAN
return Wcat

然后您需要将下一行更改为:

Flight_df.loc[:,'CAT'] = Flight_df.loc[:,'AC-Cat'].apply(lambda CT: get_wake_cat(CT,WCat_df ))


AC-Cat Origin CAT
0 B737 AJD CAT-D
1 A320 JFK CAT-D
2 MD11 LRO CAT-C

希望能解决问题

关于python - 如何比较两个数据帧的列并在它们在 Python Pandas 中匹配时产生结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57802379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com