qq_38411575 2021-03-22 01:35 采纳率: 77.8%
浏览 73
已结题

我如何根据某列的条件来赋值?

我在学习dataframe的时候碰到一个基本的问题,

如果data列>0,我需要把a列的相同行的值赋给data2列,如果data2列<0,我需要把b列的相同行的值赋给data2,我尝试了好几种办法,都没成功

代码如下(python 3.8):

import pandas as pd
import numpy as np

data = {"data": np.random.randn(200)}
df = pd.DataFrame(data)
df['a']=np.random.randint(1,100, len(df))
df['b']=np.random.randint(1,100, len(df))
df['data2']=0

上面的df和我的数据类似,我想到一个方法,感觉很粗糙,有没有更优的方法?

df['data2'].loc[df['data']>0]=df[df['data']>0]['a']
df['data2'].loc[df['data']<0]=df[df['data']<0]['b']
  • 写回答

3条回答 默认 最新

  • qq_38411575 2021-03-22 11:46
    关注

    np.where最简单:

    import pandas as pd
    import numpy as np
    
    
    def main():
        condition = {"condition": np.random.randn(200)}
        df = pd.DataFrame(condition)
        df['data1'] = np.random.randint(1, 100, len(df))
        df['data2'] = np.random.randint(1, 100, len(df))
        df['result'] = np.where(df['condition'] > 0, df['data1'], df['data2'])
        print(df.head(10))
        return
    
    
    main()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月19日
  • 已采纳回答 8月19日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备