首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向DataFrame添加基于统计信息的新列

问向DataFrame添加基于统计信息的新列
EN

Stack Overflow用户
提问于 2020-08-21 14:37:17
回答 1查看 77关注 0票数 0

这是我的第一个问题。我想建立一个统计模型。我有一个数据,我想在这个数据框中添加一列。我想让这个专栏展示一些统计数据。例如,我的数据帧是这样的

DataFrame

例如,我想添加一个新列。我想要这个栏目显示“汽车红色女孩”的D值大于所有汽车的D的平均值。我该怎么做?我应该使用哪种方法来完成此统计模型。我有一个很大的数据,我不能手动计算所有汽车或自行车的平均值。我需要一个带有if-else语句的函数,并添加一个列来描述该行的D大于或小于均值。

我的代码是这样的,但我得到的关键错误是0。

代码语言:javascript
复制
for b in list(df.A.unique()):
    for i in range(len(df.loc[df.A == b])):
        if df.loc[df.A == b, "D"][i] >= df.loc[df.A == b,"D"].mean():
            df.loc[df.A== b]["E"][i] = "Bigger"
EN

回答 1

Stack Overflow用户

发布于 2020-08-21 15:00:43

这可以通过使用pandas库来实现。假设您的DataFrame存储在变量df中。

第1步-计算列的平均值

步骤2-获取列值大于列平均值的索引

步骤3-将这些索引中的值设置为True

代码语言:javascript
复制
mean_D=df.loc[:,"D"].mean()
df.loc[:,"E"]=False #Set Initially to 'False' implying D's mean is less than column mean
indices=df[df.loc[:,"D"]>mean_D].index
df.loc[indices,"E"]=True

编辑1个

  1. 将个体均值存储在字典中

当数值大于平均值(individually)时,

  1. 计算相应的指数

  1. 将索引设置为True

代码语言:javascript
复制
from collections import defaultdict
df=pd.DataFrame({"A":['car','car','car','bike','bike','bike'],"B":['red','red','blue','black','white','red'],"C":['girl','boy','boy','boy','girl','girl'],"D":[8,7,6,9,10,7]})
dict_car_bike=defaultdict(list)
for i, temp in df.groupby("A"):
    dict_car_bike[temp.loc[:,"A"].unique()[0]]=temp.loc[:,"D"].mean()

dict_car_bike=dict(dict_car_bike)

df.loc[:,"E"]=False #Set Initially to 'False' implying D's mean is less than column mean
indices_0=df[(df.A.astype(str)==list(dict_car_bike.keys())[0]) & (df.D>dict_car_bike[list(dict_car_bike.keys())[0]])].index
indices_1=df[(df.A==list(dict_car_bike.keys())[1]) & (df.D>dict_car_bike[list(dict_car_bike.keys())[1]])].index
df.loc[indices_0,"E"]=True
df.loc[indices_1,"E"]=True

输出

Output DataFrame

代码语言:javascript
复制
     A      B     C    D      E
0   car    red  girl   8   True
1   car    red   boy   7  False
2   car   blue   boy   6  False
3  bike  black   boy   9   True
4  bike  white  girl  10   True
5  bike    red  girl   7  False

Output Dictionary with Corresponding Mean

代码语言:javascript
复制
{'bike': 8.666666666666666, 'car': 7.0}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63517683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档