请教用pandas处理数据时,如何对行数据进行筛选并赋值处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教用pandas处理数据时,如何对行数据进行筛选并赋值处理相关的知识,希望对你有一定的参考价值。

参考技术A 应该是vlookup的典型使用, 用来检索现有列表信息, 通过客户名称检索该客户的其他信息.假如A-C列是原始信息, 在E列进行查询然后在F列显示相应的信息E1输入三元 F1输入函数: =vlookup(E1,A:C,2) 得到的就是对应三元的B列的信息本回答被提问者采纳

如何在panda中对行和多列进行迭代?

我有一个数据框(df1),我想替换V2和V3列的值,如果它们的值与V1相同。

import pandas as pd
import numpy as np
df_start= pd.DataFrame({"ID":[1, 2 , 3 ,4, 5], "V1":[10,5,15,20,20], "V2":[10,5,20,17,15], "V3":[10, 25, 15, 10, 20]})

df_end = pd.DataFrame({"ID":[1, 2 , 3 ,4, 5], "V1":[10,5,15,20,20], "V2":[np.nan,np.nan,20,17,15], "V3":[np.nan, 25, np.nan, 10, np.nan]})

我知道不推荐使用iterrows,但我不知道我应该怎么做。

答案

你可以使用 mask:

对于一个单独的数据框架,请使用 assign:

df_end = df_start.assign(**df_start[['V2','V3']]
                        .mask(df_start[['V2','V3']].eq(df_start['V1'],axis=0)))

对于修改输入的数据框架,只需原地赋值即可。

df_start[['V2','V3']] = (df_start[['V2','V3']]
                      .mask(df_start[['V2','V3']].eq(df_start['V1'],axis=0)))

   ID  V1    V2    V3
0   1  10   NaN   NaN
1   2   5   NaN  25.0
2   3  15  20.0   NaN
3   4  20  17.0  10.0
4   5  20  15.0   NaN
另一答案

你仍然会使用一个常规的循环来检查各列,但是apply函数是你最好的朋友,可以进行这种面向行的操作。如果你要使用来自多个列的信息(这里你要比较一些列和 "V1"),你可以在DataFrame上使用apply函数并指定轴。如果你只想看一列的信息(比如做一个列,如果它们是偶数,就把V1的值翻倍,你可以只用一个Series来应用。

对于这两个版本的函数,你要传递的参数是一个lambda表达式。如果你应用它做一个DataFrame,就像你在这里一样。x 代表行中的值,这些值可以被列索引。最后,你将结果赋值回DataFrame中的一个新的或现有的列。

假设df_start和df_end代表你计划的输入和输出。

cols = ["V2","V3"]
for col in cols:
    df_start[col] = df.apply(lambda x[col] if x[col] != x["V1"] else np.nan, axis=1]

以上是关于请教用pandas处理数据时,如何对行数据进行筛选并赋值处理的主要内容,如果未能解决你的问题,请参考以下文章

python--pandas切片

如何在panda中对行和多列进行迭代?

Pandas日期数据处理:如何按日期筛选显示及统计数据

pandas数据预处理(字段筛选query函数进行数据筛选缺失值删除)seaborn使用Catplot函数可视化基本箱图(Boxplot with Seaborn Catplot)

Pandas 根据列中的最小值到最大值对行进行重新排序

pandas数据预处理(字段筛选query函数进行数据筛选缺失值删除)seaborn可视化分面图(facet)seaborn使用Catplot可视化分面箱图(Faceted Boxplot)