dataframe根据列特征的条件给新列特征赋值

本文介绍使用Pandas进行数据处理的两种方法:一是直接利用现有列计算最大值;二是通过自定义函数结合apply方法生成新的特征列。示例展示了如何根据特定条件对数据进行标记。

 

 

方式一: 直接用比较   df['B']=df[['B','C']].max(axis=1)

方式2 : dataframe.apply(自定义函数)

df['label']=df.apply(lambda x: label_get(x.time,x.broad),axis=1)
 

 

### 代码测试样例

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['time','B','C','D'])
## 测试,labels的生成为 A 在0-5区间内的,B/c 小于等于0.51为0,大于0.8为1  A 5-10区间内的,B/C 小于0.942的为0,大于为1

df['B']=df['B'].astype(float)
df['C']=df['C'].astype(float)
df['broad']=df['B']/df['C']
# df
df.loc['2013-01-02','B']=10
# df['B']=
print(df)
# df['z']=df[['x','y']].max(axis=1)   取两个特征中的大者做为新特征列的值
df['B']=df[['B','C']].max(axis=1)
df
## 应用函数,根据某几列特征的条件,对新特征赋值
def label_get(time_length,broad_rate):
    if time_length<5:
        if broad_rate<=0.51:
            return 0
        else:
            return 1
    elif time_length >=5 and time_length <14:
        if broad_rate<0.91:
            return 0
        else:
            return 1
    else:
        return 0
df['label']=df.apply(lambda x: label_get(x.time,x.broad),axis=1)
print(df)

输出

### Pandas DataFrame 根据条件赋值 在处理 `pandas` 数据时,经常需要基于现有数据创建。这可以通过多种方式实现,具体取决于需求。 #### 方法一:使用布尔表达式直接赋值 可以直接通过布尔表达式来创建。这种方式适用于简单的逻辑判断: ```python import pandas as pd data = { 'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'], 'population': [2100, 2300, 1000, 700], } frame = pd.DataFrame(data) # 创建 'is_large_city' frame['is_large_city'] = frame.population > 2000 print(frame) ``` 此代码片段展示了如何利用现有的 `population` 中的数值大小作为条件来决定 `is_large_city` 的值[^1]。 #### 方法二:应用自定义函数 对于更复杂的条件,可以编写一个 Python 函数并通过 `.apply()` 方法将其应用于每一行的数据: ```python def classify_population(population): if population >= 2000: return "Large" elif 1000 <= population < 2000: return "Medium" else: return "Small" frame['size_category'] = frame.population.apply(classify_population) print(frame) ``` 这段代码说明了当条件较为复杂时,怎样通过定义辅助函数来进行分类操作,并将结果存储在一个中[^4]。 #### 方法三:使用 `np.where` 或者 `pd.cut` 除了上述两种基本方法外,还可以考虑使用 NumPy 提供的 `where` 函数或是 Pandas 自带的 `cut` 函数来进行更加灵活的操作。例如: ```python import numpy as np # 使用 np.where 进行简单条件判断 frame['high_pop'] = np.where(frame.population > 1500, True, False) # 使用 pd.cut 对连续变量进行离散化分箱 bins = [-float('inf'), 999, 1999, float('inf')] labels = ["Low", "Mid", "High"] frame['pop_level'] = pd.cut(frame.population, bins=bins, labels=labels) print(frame) ``` 这里介绍了两种不同的工具——`np.where` 和 `pd.cut`——它们能够帮助完成不同类型的条件映射任务[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值