【发布时间】:2021-05-02 05:00:17
【问题描述】:
我正在尝试过滤数据帧的 3 列,并为这 3 列设置条件,如果满足所有条件,则返回二进制值 1,如果不满足条件,则返回 0。下面是一个例子。
data = {'PassengerId': array([2255, 2257, 2258, 2256, 2257, 2258, 2255, 2258, 2257, 2257, 2255,
2255, 2257, 2256, 2257, 2256, 2255, 2258, 2258, 2256, 2256, 2257,
2258, 2258, 2257]),
'Pclass': array([3, 2, 2, 2, 4, 3, 3, 4, 3, 1, 1, 1, 1, 2, 4, 3, 1, 2, 4, 3, 2, 3,
1, 1, 2]),
'Age': array([40, 33, 32, 40, 48, 24, 33, 29, 29, 31, 45, 47, 28, 32, 54, 39, 28,
50, 40, 31, 51, 26, 41, 46, 27]),
'SibSp': array([11, 13, 12, 19, 22, 17, 23, 12, 12, 12, 12, 24, 16, 21, 12, 15, 20,
18, 10, 17, 20, 12, 17, 17, 10]),
'Comf' : array([236.66883531, 235.46750709, 235.64574546, 241.16838089,
239.40728836, 239.95592634, 236.67806901, 237.73350635,
238.74497849, 235.17486552, 235.8457374 , 236.85133744,
240.9359547 , 236.27703374, 237.81871052, 241.62788018,
241.29185342, 235.0058136 , 240.69989317, 238.8073828 ,
238.08841364, 236.55259788, 237.58108419, 239.66916186,
241.97479544]),
'Parch': array([232.37686437, 232.39153096, 230.56566556, 232.77980061,
232.19436342, 232.2165835 , 232.28145641, 231.26988217,
230.55287196, 232.26528521, 230.45185855, 230.87525326,
231.38775744, 232.80960083, 232.33105822, 232.65782351,
231.64457366, 230.45225829, 231.05404057, 232.38229998,
232.57354117, 232.08690375, 230.40414215, 230.14361969,
231.40414745]),
'Fare': array([238.80427104, 239.32031287, 238.02212358, 238.40333494,
238.85929097, 239.51666683, 239.87771029, 238.06772515,
238.22734658, 238.54682118, 238.68880278, 239.79658425,
238.2642908 , 239.22884058, 239.84423352, 239.69438831,
238.85871719, 238.64632848, 238.7085097 , 239.5700877 ,
239.06199698, 238.37341378, 239.16126748, 239.01280153,
239.77047796])}
df = pd.DataFrame(data)
我试图为第一行设置一个条件,即如果“Pclass”== 1 且“Comf”介于“Parch”和“Fare”之间,则创建一个新列“Survived”并分配 1,否则分配 0 .
然后对 "Pclass" == 2, 3... 执行相同操作
我想用 pandas 来做这件事,但是这个问题的所有解决方案都是受欢迎的。
【问题讨论】:
-
PClass 2, 3 .. 的结果应该是什么?如果“Comf”在同一列“Survived”中的“Parch”和“Fare”之间,布尔值?
-
@AndrejKesely 是的,PClass 2、3 的结果......如果 PClass 为 == 2,并且“Comf”在“Parch”和“Fare”之间分配 1,则应该为 1,否则为 0,然后移动到下一个 PClass 3,如果 PClass 3 == 1 并且“Comf”在“Parch”和“Fare”之间分配 1,否则为 0。PS。这是一个行操作,PClass 和 Comf 的条件是逐行完成的。
-
我不完全理解... PClass 只是一列。你能编辑你的问题并把预期的输出放在那里吗?
标签: python pandas dataframe conditional-statements