首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫有条件选择多栏

大熊猫有条件选择多栏
EN

Stack Overflow用户
提问于 2017-01-02 00:37:05
回答 5查看 11.5K关注 0票数 1

假设我有一个数据文件:

代码语言:javascript
复制
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 C2, else pick C2 and V2

输出数据文件如下所示:

代码语言:javascript
复制
C  V 
1  2 
7  8
9  10

**编辑:再添加一个要求:列数可以更改,但要遵循一些命名模式。在本例中,选择"1“的所有列,"2”的其他列。我认为硬编码的解决方案可能行不通。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-02 08:31:11

我尝试用filternumpy.where创建更通用的解决方案,对于新列名使用extract

代码语言:javascript
复制
#if necessary sort columns
df = df.sort_index(axis=1)

#filter df by 1 and 2
df1 = df.filter(like='1')
df2 = df.filter(like='2')
print (df1)
   C1  V1
0   1   2
1   5   6
2   9  10

print (df2)
   C2  V2
0   3   4
1   7   8
2  11  12
代码语言:javascript
复制
#np.where need same shape of mask as df1 and df2
mask = pd.concat([df.Cond == 'X']*len(df1.columns), axis=1)
print (mask)
    Cond   Cond
0   True   True
1  False  False
2   True   True

cols = df1.columns.str.extract('([A-Za-z])', expand=False)
print (cols)
Index(['C', 'V'], dtype='object')

print (np.where(mask, df1,df2))
Index(['C', 'V'], dtype='object')
[[ 1  2]
 [ 7  8]
 [ 9 10]]

print (pd.DataFrame(np.where(mask, df1, df2), index=df.index, columns=cols))
   C   V
0  1   2
1  7   8
2  9  10
票数 2
EN

Stack Overflow用户

发布于 2017-01-02 01:47:32

DataFrame.where()的另一种选择

代码语言:javascript
复制
df[['C1', 'V1']].where(df.Cond == "X", df[['C2', 'V2']].values)

#  C1   V1
#0  1    2
#1  7    8
#2  9   10
票数 3
EN

Stack Overflow用户

发布于 2017-01-02 00:56:12

  • drop Cond专注于我从中选择的值
  • reshape numpy数组,这样我就可以用布尔值进行区分。
  • np.arange(len(df))索引第一维度,每一行一次
  • df.Cond.ne('X').mul(1)索引二维。0等于X
  • 构造最终数据
代码语言:javascript
复制
pd.DataFrame(
    df.drop('Cond', 1).values.reshape(3, 2, 2)[
        np.arange(len(df)),
        df.Cond.ne('X').mul(1)
    ], df.index, ['C', 'V'])

   C   V
0  1   2
1  7   8
2  9  10
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41420264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档