В качестве кадра данных d1 ниже A1
соответствует B1
, A2
соответствует B2
и т. Д. Я хочу изменить значение B1-3
при условии: B
или C
= копировать 2 раза, D
= копировать 3 раза, в качестве кадра данных target .
d1 = DataFrame([{'A1': 'A', 'A2': 'A', 'A3': '', 'B1': '2', 'B2': '2', 'B3': ''},
{'A1': 'A', 'A2': 'C', 'A3': '', 'B1': '2', 'B2': '2', 'B3': ''},
{'A1': 'A', 'A2': 'B', 'A3': 'C', 'B1': '2', 'B2': '4', 'B3': '4'},
{'A1': 'A', 'A2': 'C', 'A3': 'D', 'B1': '2', 'B2': '2', 'B3': '4'}])
d1
A1 A2 A3 B1 B2 B3
0 A A 2 2
1 A C 2 2
2 A B C 2 4 4
3 A C D 2 2 4
target = DataFrame([{'A1': 'A', 'A2': 'A', 'A3': '', 'B1': '2', 'B2': '2', 'B3': ''},
{'A1': 'A', 'A2': 'C', 'A3': '', 'B1': '2', 'B2': '22', 'B3': ''},
{'A1': 'A', 'A2': 'B', 'A3': 'C', 'B1': '2', 'B2': '44', 'B3': '44'},
{'A1': 'A', 'A2': 'C', 'A3': 'D', 'B1': '2', 'B2': '22', 'B3': '444'}])
target
A1 A2 A3 B1 B2 B3
0 A A 2 2
1 A C 2 22
2 A B C 2 44 44
3 A C D 2 22 444
И я пытался использовать np.where
для условий B
и C
, но, похоже, это применимо только к B
для копирования значения. Есть ли способы достичь этого.
Acol = ['A1','A2','A3']
Bcol = ['B1','B2','B3']
d1[Bcol] = np.where(d1[Acol] == ('B' or 'C'), d1[Bcol]+d1[Bcol], d1[Bcol])
d1
A1 A2 A3 B1 B2 B3
0 A A 2 2
1 A C 2 2
2 A B C 2 44 4
3 A C D 2 2 4