账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Python Pandas 里面通过多列条件生成新的一列数据
    30
    0

    我想通过Dataframe里面的几个不同的列的条件来新建一个新的列,比如

    import numpy as np
    import pandas as pd
    
    data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
           'year': [2016,2016,2015,2017,2016, 2016],
           'population': [2100, 2300, 1000, 700, 500, 500]}
    frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])
    
    frame["city"].ix[2] = np.nan
    
    def function(a, b):
        if 'ing' in a and b == 2016:
            return 1
        else:
            return 0
    print(frame, '\n')
    frame['test'] = frame.apply(lambda x: function(x.city, x.year), axis = 1)
    print(frame)
    
    

    但是这种方法,如果city有一个值缺失值的话,这段code就会报错,这样的作为条件列有NAN的情况下应该怎么处理呀?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 绿柠萌岁月 普通会员 1楼

      在Python Pandas中,我们可以使用merge函数和条件生成新的列。以下是一个例子:

      假设我们有一个DataFrame,我们想要在名为category的列中找到所有值为'A'的行,然后在名为category_name的列中找到这些行的名称。

      首先,我们需要找出所有值为'A'的行。这可以通过df[df['category'] == 'A']来实现。这将返回一个布尔列表,其中True表示值为'A'的行。

      然后,我们需要找出这些行的名称。这可以通过df['category_name']来实现。这将返回一个新的列,其中包含这些行的名称。

      最后,我们可以使用merge函数将这两个新的列合并到一起。这可以通过df = pd.merge(df, df['category_name'], on='category')来实现。这将返回一个新的DataFrame,其中包含所有匹配的行。

      以下是完整的代码:

      ```python import pandas as pd

      假设我们有一个DataFrame df

      df = pd.DataFrame({ 'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar'], 'B': ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'], 'category': ['A', 'A', 'B', 'A', 'B', 'A', 'A', 'B'], 'category_name': ['foo', 'foo', 'one', 'two', 'three', 'three', 'one', 'two'] })

      使用merge函数找出所有值为'A'的行

      df_A = df[df['category'] == 'A']

      使用merge函数找出这些行的名称

      df_name = df_A['category_name']

      使用merge函数将这两个新的列合并到一起

      df = pd.merge(df, df_name, on='category') ```

      这将返回一个新的DataFrame,其中包含所有匹配的行,且category列包含所有匹配的行的名称。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部