假设我有一个 Dataframe :
C1 V1 C2 V2 Cond
1 2 3 4 X
5 6 7 8 Y
9 10 11 12 X
这些语句应返回:if Cond == X, pick C1 and v1, else pick C2 and V2
。
输出的dataframe类似于:
C V
1 2
7 8
9 10
**编辑:添加一个要求:列的数量可以改变,但要遵循一些命名模式。在这种情况下,选择所有带有“1”的列,否则选择“2”。我认为硬编码的解决方案可能不起作用。
5条答案
按热度按时间w1e3prcc1#
使用
DataFrame.where()
的另一个选项:yvgpqqbh2#
我尝试使用
filter
和numpy.where
创建更通用的解决方案,对于新的列名使用extract
:s3fp2yjn3#
drop
Cond
用于关注我从中选择的值reshape
numpy数组,所以我可以用布尔值区分np.arange(len(df))
索引第一个维度,每一行一次df.Cond.ne('X').mul(1)
.0
索引第二维,等于X
rta7y2nd4#
如果行的顺序不重要,可以使用df.loc和df.append。
s5a0g9ez5#
您可以尝试使用类似于this post中的方法
首先,定义几个函数:
然后,假设您的 Dataframe 名为
df
,请记住,这种方法对于大型 Dataframe 可能会很慢,因为
apply
没有利用向量化。但是,它甚至可以用于任意列名(只需将['C', 'V']
替换为实际列名)。