【问题标题】:How to create new column based on average with certain conditions and ignore null in python dataframe?如何在特定条件下基于平均值创建新列并忽略 python 数据框中的空值?
【发布时间】:2022-11-29 11:37:13
【问题描述】:

我有一张桌子

date James Jamie John Allysia Jean
2022-01-01 NaN 6 5 4 3
2022-01-02 7 6 7 NaN 5
names groupings
James guy
John guy
Jamie girl
Allysia girl
Jean girl

进入

date James Jamie John Allysia Jean girl guy
2022-01-01 NaN 6 5 4 3 5 5
2022-01-02 7 6 7 NaN 5 5.5 7

阈值= >3

我想创建一个按男孩/女孩分数分组的新列,其中得分高于阈值,并在忽略 NaN 和不符合阈值的分数的同时得到他们的平均值。

我不知道如何用 nan 替换低于阈值的分数。

我试着做一个分组,让他们进入一个列表,并用平均值创建新行。

groupingseries = groupings.groupby(['grouping'])['names'].apply(list)
for k,s in zip(groupingseries.keys(),groupingseries):
  try:
    its='"'+',"'.join(s)+'"'
    df[k]=df[s].mean()
  except:
    print('not in item')

不确定为什么结果会为女孩和男孩返回 NaN。 请帮忙。

【问题讨论】:

    标签: python


    【解决方案1】:

    假设 dfgroupings 您的两个输入数据帧:

    out = df.join(df.groupby(df.columns.map(groupings.set_index('names')['groupings']),
                             axis=1).sum()
                  )
    

    输出:

             date  James  Jamie  John  Allysia  Jean  girl   guy
    0  2022-01-01    NaN      6     5      4.0     3  13.0   5.0
    1  2022-01-02    7.0      6     7      NaN     5  11.0  14.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 2021-06-28
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 2018-03-27
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多