python pandas同时对多列进行赋值

python pandas同时对多列进行赋值

如dataframe

                data1['月份']=int(month)                     #加入月份和企业名称
                data1['企业']=parmentname

可以增加单列,并赋值,如果想同时对多列进行赋值

                data1['月份','企业']=int(month) ,   parmentname                 #加入月份和企业名称
            

会出错
ValueError: Length of values does not match length of index

data[['合计','平均']]='数据','月份'

类似这样的,也无效
KeyError: “None of [Index([‘合计’, ‘平均’], dtype=‘object’)] are in the [columns]”

只有下例中:

import pandas as pd


chengji=[[100,95,100,99],[90,98,99,100],[88,95,98,88],[99,98,97,87],[96.5,90,96,85],[94,94,93,91],[91, 99, 92, 87], [85, 88, 85, 90], [90, 92, 99, 88], [90, 88, 89, 81], [85, 89, 89, 82], [95, 87, 86, 88], [90, 97, 97, 98], [80, 92, 89, 98], [80, 98, 85, 81], [98, 88, 95, 92]]
data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治'])
print (data)
# data1=data[['数学','语文','英语','政治']]                               #排序
# data1=data1.reset_index(drop=True)                    #序列重建
# data1.index.names=['序号']                                 #序列重命名
# data1.index=data1.index+1                             #序列从1开始
# print (data1)
data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治'],index=[i for i in range(1,len(chengji)+1)])
print (data)
data[['合计','平均']]=data.apply(lambda x: (x.sum(), x.sum()/4),axis=1,result_type='expand')
print (data[:])

data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治'],index=[i for i in range(1,len(chengji)+1)])
print (data)
data[['合计','平均']]=data.apply(lambda x:('数据','月份'),axis=1,result_type='expand')
print (data[:])

应用apply 并设置result_type=‘expand’ 参数才可以。

先前的例子,用如下的方法就行了

data1[['月份','企业']]=data1.apply(lambda x:(int(month),parmentname),axis=1,result_type='expand')
                # data1['月份']=int(month)                     #加入月份和企业名称
                # data1['企业']=parmentname
                #print (data1)

后记:

如果’月份’,'企业’列存在,用如下也可,上例中,直接可以创建不存在的列。

data1.lco[:,['月份','企业']]=int(month),parmentname
或
data1[['月份','企业']]=int(month),parmentname

今天又遇到一个从某列截取字符串长度写到另一列的,也一并写到这里:
货品列在原表中无,取货品代码的前12位。

totaldata =  totaldata.reset_index(drop=False)
totaldata['货品'] = totaldata['货品代码'].apply(lambda x:x[:12])

后记:2020.5.17又遇到想新增两列并赋值的问题

import numpy as np
import pandas as pd
from pandas import Series
 
chengji = [['N', 95, 0], ['N', 100, 88], ['N', 88, 100], ['N', 66, 0]]
data = pd.DataFrame(chengji, columns=['p', 'x', 'g'])

data[['序号','列名']]=data[['p','x']] #pd.DataFrame(data[['p','x']])# .apply(lambda x : x )

print(data)
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用 `loc` 方法根据某一列的对另一列进行赋值,例如: ``` import pandas as pd # 创建示例数据 df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 根据 A 列的对 B 列进行赋值 df.loc[df['A'] == 2, 'B'] = 10 print(df) ``` 输出结果: ``` A B 0 1 4 1 2 10 2 3 6 ``` 这里的 `df['A'] == 2` 表示筛选出 A 列中为 2 的行,然后对这些行的 B 列进行赋值。 ### 回答2: 在pandas中,可以使用`df.loc`方法根据一列的条件对另一列进行赋值。 首先,我们需要创建一个DataFrame对象,用于演示操作。假设我们有一个包含学生姓名和对应数学成绩的数据表。代码如下: ```python import pandas as pd data = {'姓名': ['张三', '李四', '王五', '赵六'], '数学成绩': [75, 82, 68, 90]} df = pd.DataFrame(data) ``` 现在,我们想根据数学成绩给学生打分,如果成绩大于等于80分,就给予"A"评级,否则给予"B"评级。 我们可以使用以下代码根据数学成绩列对评级列进行赋值: ```python df.loc[df['数学成绩'] >= 80, '评级'] = 'A' df.loc[df['数学成绩'] < 80, '评级'] = 'B' ``` 结果如下: ``` 姓名 数学成绩 评级 0 张三 75 B 1 李四 82 A 2 王五 68 B 3 赵六 90 A ``` 在上述代码中,我们使用`df.loc`方法来选择满足条件的行,并对评级列进行赋值。第一个参数是行选择条件,第二个参数是列的标签。对于第一个`df.loc`,我们选择数学成绩大于等于80的行,并将对应的评级列赋值为“A”。对于第二个`df.loc`,我们选择数学成绩小于80的行,并将对应的评级列赋值为“B”。 以上就是使用pandas根据一列对另一列赋值的方法。 ### 回答3: 在使用pandas库时,可以根据一列的赋值给另一列。首先,我们需要导入pandas库: ```python import pandas as pd ``` 然后,我们可以创建一个DataFrame来进行操作。DataFrame是pandas库中最常用的数据结构,类似于表格。 ```python data = {'A': [1, 2, 3, 4, 5], 'B': [6, 7, 8, 9, 10]} df = pd.DataFrame(data) ``` 现在,我们有一个包含两列数据(A列和B列)的DataFrame。接下来,我们将使用A列的赋值给B列。可以使用以下语法: ```python df['B'] = df['A'] ``` 这意味着我们要将A列的赋值给B列。此时,B列的将与A列的完全相同。 我们还可以在赋值时添加一些条件。例如,我们可以根据A列的是否大于5来决定是否给B列赋值为1。可以使用以下代码: ```python df.loc[df['A'] > 5, 'B'] = 1 ``` 上述代码中,`df['A'] > 5`是一个条件判断,用于筛选出A列中大于5的行。之后,我们将这些行中的B列的赋值为1。 综上所述,我们可以使用以上方法根据一列的对另一列进行赋值。无论是直接赋值还是根据条件赋值pandas库都提供了很多灵活的方法来操作DataFrame中的数据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值