【发布时间】:2021-03-25 12:49:41
【问题描述】:
我有以下两个数据框。
df_1
| AA | BB | CC | DD |
|---|---|---|---|
| "Apple" | XYZ1 | XYZ2 | |
| "Apple" | PQR1 | PQR2 | |
| "Apple" | XYZ4 | PRR9 | |
| "Banana" | XYZ1 | 416 | |
| "Banana" | XYZ1 | 416 | |
| "Apple" | XYZ4 | PRR9 |
df_lookup
| AA | XX | YY | ZZ |
|---|---|---|---|
| "Apple" | XYZ1 | XYZ2 | 429 |
| "Apple" | XYZ4 | PRR9 | 97 |
| "Apple" | PQR1 | PQR2 | 108 |
| "Banana" | XYZ1 | PQR1 | 416 |
预期结果:
我的目标是填写 df_1 中的空值。换句话说:
if AA == "Apple" then
df_1.DD = SELECT df_lookup.ZZ
FROM df_lookup
LFET JOIN df_1
ON df_1.BB = df_lookup.XX, df_1.CC = df_lookup.YY
恰恰相反……
if AA == "Banana" then
df_1.CC = SELECT df_lookup.YY
FROM df_lookup
LFET JOIN df_1
ON df_1.BB = df_lookup.XX, df_1.DD = df_lookup.ZZ
df_1(填充/修改)
| AA | BB | CC | DD |
|---|---|---|---|
| "Apple" | XYZ1 | XYZ2 | 429 |
| "Apple" | PQR1 | PQR2 | 108 |
| "Apple" | XYZ4 | PRR9 | 97 |
| "Banana" | XYZ1 | PQR1 | 416 |
| "Banana" | XYZ1 | PQR1 | 416 |
| "Apple" | XYZ4 | PRR9 | 97 |
到目前为止,我尝试了以下方法
apple_merged = pd.merged(df_1, df_lookup, left_on = ["BB", "CC"], right_on = ["XX", "YY"])
df_1[(df_1["AA"] == "Apple")]["DD"] = apple_merged[(apple_merged.AA == "Apple")]["ZZ"].values
我的实际代码中出现以下错误:
ValueError:值的长度 (501) 与索引的长度不匹配 (602)
这似乎表明数据的形状在分配的另一侧是不同的,501 v/s 602。但是如果我真的做了左连接,在这种情况下,行数对我来说是否不一样?
【问题讨论】:
-
您期望最终结果是什么样子的?
-
请发布您的预期输出。
-
@piRSquared & Mayank :除了查询之外,还添加了预期结果 DataFrame 示例。谢谢!
标签: python pandas dataframe python-3.8