【发布时间】:2021-04-01 13:48:36
【问题描述】:
我有以下数据,我希望只有在满足以下条件时,才在col D中用另一行(我们称之为目标行)的值填充col E:
- col E 没有值
- 目标行col A中的字符串与col A中的字符串相同
- 目标行的 col B 中的值与 col C 中的值相同
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | XXZ | a | d | 1 | |
| 2 | YXXZ | b | a | 2 | |
| 3 | YXXZ | c | b | 3 | 2 |
| 4 | YXXZ | d | c | 4 | 5 |
| 5 | XXZ | e | a | 4 |
我会得到这样的东西:
| A | B | C | D | E |
|---|---|---|---|---|
| XXZ | a | d | 1 | 1 |
| YXXZ | b | a | 2 | 2 |
| YXXZ | c | b | 3 | 2 |
| YXXZ | d | c | 4 | 5 |
| XXZ | e | a | 4 | NaN |
下面@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']
【问题讨论】:
-
我完全听不懂你的指示...
-
我已经改写了。是不是更清楚了?
-
什么是目标行?
-
我想从中提取 col D 值的行
-
的。为什么要放在第 2、2 行
标签: python pandas loops csv conditional-statements