我有下表,我需要按Col 1分组,检查Col 2是否包含Y,
如果是,则创建新列Col 4,并在Col 4的所有行中插入相应的Col 3;如果否,则在Col 4中仅插入colyCol 3
| 指数|Col1| Col2| Col3|
| --|--|--|--|
| 0 | 1 |X| ABC|
| 1 | 1 |Y| XX|
| 2 | 1 |X| QW|
| 3 | 2 |X| VB|
| 4 | 2 |X| AY|
| 5 | 3 |X| MM|
| 6 | 3 |X| YY|
| 7 | 3 |Y| XX|
所需表
| --|Col1| Col2| Col3|新栏|
| --|--|--|--|--|
| 0 | 1 |X| ABC| XX|
| 1 | 1 |Y| XX| XX|
| 2 | 1 |X| QW| XX|
| 3 | 2 |X| VB| VB|
| 4 | 2 |X| AY| AY|
| 5 | 3 |X| MM| XX|
| 6 | 3 |X| YY| XX|
| 7 | 3 |Y| XX| XX|
2条答案
按热度按时间a11xaf1n1#
您可以在隐藏不需要的值后使用
groupby_transform
:字符串
输出量:
型
一步一步:
型
gdx19jrr2#
仅通过
boolean indexing
过滤Y
行,并通过Col1
使用Series.map
,最后通过Series.fillna
替换不匹配的值:字符串
如果可能,匹配值为
NaN
,则修改解决方案:型
编辑:如果每组有多个
Y
值,则解决方案-将每组的随机值替换为DataFrameGroupBy.sample
:型