Python菜鸟求助一个很简单的问题!~~

  • h
    hao123liu
    如图。这是一个dataframe,我想生成D列:

    对于T月,如果T-1月的A,大于T-2月的A,则D列等于B列的值;如果T-1月的A小于或等于T-2月的A,则D列等于C列的值;


    其实用excel是很简单,但是用python不知道怎么写。。。搜了半天也没搜到。


    请大拿多多赐教!

  • c
    clive
    描述的清楚,那么难在哪儿?
  • 7
    729088672
    Excel 用pandas吧

    搜一下用法,很简单的
  • w
    wsyx87930
    弄个数组把这些数装起来,然后用公式给第四列赋值,不就出来了?
  • d
    debauchee
    循环所有行
    做一个长度为3的队列
    然后每次循环把新行扔进去
    当队列满了,就取出来算
    队列1为t-2月的列表
    队列2为t-1月的列表
    队列为t月的列表
    然后开始算就好了
  • l
    lance6716
    pandas里面shift [1] 是做“平移N行”,可以对A列应用,得到1行和2行的中间结果
    然后可以用pandas.where [2] 或者 numpy.where [3]做这个分支判断,得到D
    我笔记本上没环境,没法跑跑看

    [1]https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shift.html
    [2]https://pandas.pydata.org/pandas ... ataFrame.where.html
    [3]https://docs.scipy.org/doc/numpy ... re.html#numpy.where
  • w
    wuyanzhicheng
    同是python菜鸟,可以试试xlrd和xlwt。用之前的代码改了一段,仅循环部分 前面读取的没写。
    读取原始数据表后,使用for循环
    for i in range(3,nrows): #nrows 是表格总行数
    data = 0
    if sh.cell_value(i-1,1) > sh.cell_value(i-2,1): #单元格(i-1,1)大于单元格(i-2,1)
    data = sh.cell_value(i,3) #data = 单元格(i,3) 即i行C列
    else:
    data = sh.cell_value(i,2) #否则 da'ta = 单元格(i,2)即 i行B列
    table.write(i-1,0,sh.cell_value(i,0))
    table.write(i-1,1,sh.cell_value(i,1))
    table.write(i-1,2,sh.cell_value(i,2))
    table.write(i-1,3,sh.cell_value(i,3)) #以上几行分别把原数据表的i行的0到3列写入到新表中
    table.write(i-1,4,data) #将判断得到的data写入新表的i行4列
    file.save('output.xls') #保存新表
  • k
    keshouz
    楼主直接看这楼就行了,:+1: iOS fly ~
  • z
    zpwinever
    行间比较用pandas的shift