找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 116|回复: 7

[求助] 关于pandas库中dataframe帅选赋值的问题求助

2

主题

5

帖子

5

积分

贫民

积分
5
叶流云_ihqHk 发表于 2017-11-22 14:19:15 | 显示全部楼层 |阅读模式
请帮忙看看如何根据B列的字段,来生成新的列;我的代码有什么问题

  1. #-*- coding=utf-8 -*-
  2. import os
  3. import pandas as pd
  4. import openpyxl
  5. df = pd.read_excel("tasheng.xls",encoding='gbk')
  6. df['D']='1'
  7. df['D']=df['D'][df['B'].str.contains('个人融合')].map({'1':'个人融合'})
  8. df['D']=df['D'][df['B'].str.contains('续包')].map({'1':'续包'})
  9. print(df)
复制代码


pandas练习.py

296 Bytes, 下载次数: 1

tasheng.xls

29 KB, 下载次数: 2

回复

使用道具 举报

1

主题

115

帖子

115

积分

版主

Rank: 7Rank: 7Rank: 7

积分
115

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-22 15:23:53 | 显示全部楼层
import os
import pandas as pd
import openpyxl
df = pd.read_excel("tasheng.xls",encoding='gbk')
df['D']='1'
df['D'].update(df['D'][df['B'].str.contains('个人融合')].map({'1':'个人融合'}))
df['D'].update(df['D'][df['B'].str.contains('续包')].map({'1':'续包'}))
print(df)
你是这个意思吧
回复 支持 反对

使用道具 举报

2

主题

5

帖子

5

积分

贫民

积分
5
叶流云_ihqHk  楼主| 发表于 2017-11-22 15:51:47 | 显示全部楼层
剑心无痕 发表于 2017-11-22 15:23
import os
import pandas as pd
import openpyxl

是的,找了好久都没有找到方法,非常感谢。updata这个词让我感觉像mysql的用法
回复 支持 反对

使用道具 举报

1

主题

115

帖子

115

积分

版主

Rank: 7Rank: 7Rank: 7

积分
115

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-22 16:04:30 | 显示全部楼层
叶流云_ihqHk 发表于 2017-11-22 15:51
是的,找了好久都没有找到方法,非常感谢。updata这个词让我感觉像mysql的用法 ...

不过那样效率比较低,这样写更快, 大概能快10倍以上吧
import os
import pandas as pd
import openpyxl
df = pd.read_excel("tasheng.xls",encoding='gbk')
def update(row):
    if row['B'].find('个人融合') > -1:
        row['D'] = '个人融合'
    elif row['B'].find('续包') > -1:
        row['D'] = '续包'
    else:
        row['D'] = '1'
    return row

d = df.apply(update, axis=1)
print(d)
回复 支持 反对

使用道具 举报

2

主题

5

帖子

5

积分

贫民

积分
5
叶流云_ihqHk  楼主| 发表于 2017-11-22 16:31:43 | 显示全部楼层
剑心无痕 发表于 2017-11-22 16:04
不过那样效率比较低,这样写更快, 大概能快10倍以上吧
import os
import pandas as pd

好的好的,好像几个地方都看到apply很好用,要仔细研究一下。请问你有pandas库详细的教程么,网上都是入门级。
回复 支持 反对

使用道具 举报

1

主题

115

帖子

115

积分

版主

Rank: 7Rank: 7Rank: 7

积分
115

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-22 16:34:12 | 显示全部楼层
叶流云_ihqHk 发表于 2017-11-22 16:31
好的好的,好像几个地方都看到apply很好用,要仔细研究一下。请问你有pandas库详细的教程么,网上都是入 ...

其实官方手册都有示例http://pandas.pydata.org/pandas-docs/stable/
回复 支持 反对

使用道具 举报

0

主题

64

帖子

64

积分

新手

积分
64
sheeboard 发表于 2017-11-22 22:09:52 | 显示全部楼层
df['D']=1
df.ix[(df['B'].str.contains(u'个人融合')) & (df['C']>-1),'D']=u'个人融合'
df.ix[(df['B'].str.contains(u'续包')) & (df['C']>-1),'D']=u'续包'
回复 支持 反对

使用道具 举报

0

主题

64

帖子

64

积分

新手

积分
64
sheeboard 发表于 2017-11-22 22:23:33 | 显示全部楼层
上面连接文档里的内容

书上的列子,多条件用&连接

书上的列子,多条件用&连接
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表