在包含破折号的多列上设置数据帧If-else条件

2024-06-02 05:08:16 发布

您现在位置:Python中文网/ 问答频道 /正文

请注意,我只想用“熊猫”。我不想使用lambda或NumPy

我有一个如下所示的数据框

import pandas as pd

df = pd.DataFrame({
    "first-name": ["john","peter","john","alex"],
    "height-ft": [6,5,4,6],
    "shape-type": ["null","null","null","null"]
})

我想申请这个

If first-name == john and height-ft == 6 
           return shape-type = good 
else if height-ft == 4
       return shape-type = bad 
else  
       change the shape-type to middle

最后的数据帧应该是这样的

  df = ({
        "first-name": ["john","peter","john","alex"],
        "height-ft": [6,5,4,6],
        "shape-type": ["good","middle","bad","middle"]
    })

Tags: 数据namemiddledfreturntypejohnnull
3条回答

您还可以使用iterrows()执行一个函数,该函数将遍历df的所有行,然后您可以应用一个函数

import pandas as pd

df = pd.DataFrame({
    "first_name": ["john","peter","john","alex"],
    "height_ft": [6,5,4,6],
    "shape_type": ["null","null","null","null"]
})

print(df)

def define_shape_type(first_name, height_ft) :
    if first_name == 'john' and height_ft == 6 :
        return "good" 
    elif height_ft == 4 :
        return "bad" 
    else :
        return "middle"

for index, row in df.iterrows():
    df.set_value(index, "shape_type", define_shape_type(row.first_name, row.height_ft))

print(df)

没有numpy,您可以执行以下操作:

df.loc[(df['first-name'] == 'john') & (df['height-ft'] == 6), 'shape-type'] = 'good'
df.loc[(df['height-ft'] == 4), 'shape-type'] = 'bad'
df.loc[((df['first-name'] != 'john') & (df['height-ft'] != 4)), 'shape-type'] = 'middle'
print(df)

  first-name  height-ft shape-type
0       john          6       good
1      peter          5     middle
2       john          4        bad
3       alex          6     middle

np.where一起:

df['shape-type'] = np.where((df['first-name']=='john') & (df['height-ft']==6), 'good', 'middle')
df['shape-type'] = np.where((df['height-ft']==4), 'bad', df['shape-type'])

  first-name  height-ft shape-type
0       john          6       good
1      peter          5     middle
2       john          4        bad
3       alex          6     middle
In [183]: df['shape-type'] = "middle"

In [184]: df.loc[(df['first-name'] == 'john') & (df['height-ft'] == 6), 'shape-type'] = "good"

In [185]: df.loc[df['height-ft'] == 4, 'shape-type'] = "bad"

In [186]: df
Out[186]:
  first-name  height-ft shape-type
0       john          6       good
1      peter          5     middle
2       john          4        bad
3       alex          6     middle

相关问题 更多 >