我有以下数据,我想要的是仅当满足以下条件时,才用 col D 中另一行(我们称之为目标行)的值填充 col E:
- col E 没有价值
- 目标行 col A 中的字符串与 col A 中的字符串相同
- 目标行的 col B 中的值与 col C 中的值相同
| 一个 | 乙 | C | D | 乙 | |
|---|---|---|---|---|---|
| 1 | XXZ | 一个 | d | 1 | |
| 2 | YXXZ | b | 一个 | 2 | |
| 3 | YXXZ | C | b | 3 | 2 |
| 4 | YXXZ | d | C | 4 | 5 |
| 5 | XXZ | e | 一个 | 4 |
我会得到这样的东西:
| 一个 | 乙 | C | D | 乙 |
|---|---|---|---|---|
| XXZ | 一个 | d | 1 | 1 |
| YXXZ | b | 一个 | 2 | 2 |
| YXXZ | C | b | 3 | 2 |
| YXXZ | d | C | 4 | 5 |
| XXZ | e | 一个 | 4 | 钠 |
下面@ralubrusto 的答案有效,但对于大文件显然效率不高。有什么建议可以让它更快地工作吗?
missing = df.E.isna()
for id in df[missing].index:
original = df.loc[id]
# Second condition
equal_A = df[df['A'] == original['A']]
# Third condition
the_one = equal_A[equal_A['C'] == original['B']]
# Assigning
if len(the_one) > 0:
df.at[id, 'E'] = the_one.iloc[0]['D']
