joeyoung18
2021-03-26 20:51
采纳率: 100%
浏览 167
已采纳

DataFrame经循环语句后输出series,期望是按原格式输出DataFrame

import pandas as pd

#定义DataFrame
df = pd.DataFrame(([1,2,3,4],[3,4,5,6],[4,5,6,7]),columns = list('abcd'))

#定义函数
def func(x):
    temp = []
    for i in range(4):
        if x[i] > 3:
            temp.append('over 3')
        else:
            temp.append('under 3')
    return temp

#apply过程
df.apply(func,axis = 1)

#输出的是Series,并不是在原DataFrame格式上修改内容
#期望达到的效果是直接在原DataFrame的格式上对值进行修改
#这里是对触发现象的函数进行了简化,更加具体的函数式在下方已补充

---

这里是补充描述

import pandas as pd

#定义DataFrame
df = pd.DataFrame(([1,0,0,1],[0,0,0,1],[0,1,0,0]),columns = list('abcd'))

#定义函数
def func(x):
    states = []
    for i in range(4):
       
        if x[i] == 0:
            if len(states) > 0:
                if states[i-1] == 'unreg':
                    states.append('unreg')
                else:
                    states.append('unactive')
            else:
                states.append('unreg')
      
        else:
            if len(states) == 0:
                states.append('new')
            else:
                if states[i-1] == 'unactive':
                    states.append('return')
                elif states[i-1] == 'unreg':
                    states.append('new')
                else:
                    states.append('active')
    return states

#对DataFrame使用函数
df.apply(func,axis = 1)

#此时输出的是Series,但我期望的是保留原DataFrame的格式,将原本的数值替换成相应的文本

期望显示的结果如下:

 

谢谢各位大大指路...!

 

 

 

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

3条回答 默认 最新

相关推荐 更多相似问题