Pandas的索引匹配?

2024-10-03 04:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据x值的行键和列键匹配x值。在excel中,我使用了索引和;匹配以获取正确的值,但我在Pandas中很难做到这一点

示例:

我想将突出显示的值(保存在df2中)添加到我的df['Cost']列中

我得到了df['Weight']&;df['Country']作为键,但我不知道如何使用它们来查找df2中突出显示的值

如何将黄色值提取到df3['Postage'],然后使用它将其添加到df['Cost']列中

Simplified Matrix

我希望这是有道理的。让我知道我应该提供更多信息

编辑-更多信息(抱歉,我不知道如何从Jupyter复制输出): enter image description here

当我运行[93]时,我得到以下错误:

ValueError: Row labels must have same size as column labels

谢谢


Tags: 信息示例pandasdflabelsexcelcountryamp
2条回答

用于您的案例(注意[0]需要索引到数组中)

row = df1.iloc[1]
df2[df2.Country == row.Country][row.Weight][0]

希望这对.iloc和.loc有所帮助

d = {chr(ord('A')+r):[c+r*10 for c in range(5)] for r in range(5)}
df = pd.DataFrame(d).transpose()
df.columns=['a','b','c','d','e']
print(df)
print("    ")
print(df.loc['B']['c'])
print(df.iloc[1][2])

输出

    a   b   c   d   e
A   0   1   2   3   4
B  10  11  12  13  14
C  20  21  22  23  24
D  30  31  32  33  34
E  40  41  42  43  44
    
12
12

只需获取突出显示的值1.75

df2.loc[df2['Country']=='B', 3]

因此,概括上述内容并使用来自df1的国家权重密钥对:

cost = []

for i in range(df1.shape[0]):
    country = df1.loc[i, 'Country']
    weight = df1.loc[i, 'Weight']
    cost.append(df2.loc[df2['Country']==country, weight]

df1['Cost'] = cost

或者更好:

df1['Cost'] = df1.apply(lambda x: df2.loc[df2['Country']==x['Country'], x['Weight'], axis=1)

相关问题 更多 >