python - 根据条件选择数据框列
问题描述
输入数据框:
a b c d e f g j k l m n o p q r s t
2 33 17 0 418 -5 -81 NaN 14336 81 1 462 -24 NaN 81 1 462 -24 NaN
5 33 17 0 415 -5 -116 NaN 14336 81 0 487 -5 116 81 1 462 -24 NaN
7 33 17 0 413 -5 -116 NaN 14336 81 1 462 -24 NaN 81 1 462 -24 -111
检查列的值c
是否等于0
:将值插入d
e
f
到x1
x2
x3
检查列的值l
是否等于0
:将值插入m
n
o
到y1
y2
y3
如果他的列l
值等于1
:检查列o
和t
:第一个包含值,插入m
n
o
,或r
s
t
进入列z1
z2
z3
输出数据框:
x1 x2 x3 y1 y2 y3 z1 z2 z3
2 418 -5 -81 NaN NaN NaN 462 -24 NaN
5 415 -5 -116 487 -5 116 462 -24 NaN
7 413 -5 -81 NaN NaN NaN 462 -24 -111
解决方案
我认为需要where
按条件过滤,concat
将所有DataFrame
s 连接在一起并用另一个combine_first
替换s :NaN
DataFrame
df1 = df[['d','e','f']].where(df['c'].eq(0))
df1.columns = ['x1','x2','x3']
df2 = df[['m','n','o']].where(df['l'].eq(0))
df2.columns = ['y1','y2','y3']
df31 = df[['m','n','o']].where(df['l'].eq(1) & df['o'].notnull())
df31.columns = ['z1','z2','z3']
df32 = df[['r','s','t']].where(df['l'].eq(1) & df['t'].notnull())
df32.columns = ['z1','z2','z3']
df = pd.concat([df1, df2, df31.combine_first(df32)], axis=1)
print (df)
x1 x2 x3 y1 y2 y3 z1 z2 z3
2 418 -5 -81 NaN NaN NaN NaN NaN NaN
5 415 -5 -116 487.0 -5.0 116.0 NaN NaN NaN
7 413 -5 -116 NaN NaN NaN 462.0 -24.0 -111.0
推荐阅读
- c++ - 带有结构和向量的 C++ 函数
- youtube-api - 在 Google 仪表板中启用时 YouTube API 错误 403
- azure - 将 .NET Core Web 应用程序发布到 Azure 上的 Linux
- redux - 构建 Redux 状态
- dma - 数据如何从内存传输到 PCIe 卡?
- apache-spark - Spark 2.4.1 无法从 HDFS 读取 Avro 文件
- apache - 使用 HTTP_ORIGIN 阻止请求以防止垃圾邮件
- javascript - 我在销售订单上有一个自定义地址簿字段用于货运单目的,但我无法将完整地址获取到 NetSuite 中的文本字段
- java - 事务失败,因为表在 ORACLE 中被锁定
- c# - SQL Server ID 列和 DDL selectedindex 之间的 ASP.NET DropDownList 差异