为了账号安全,请及时绑定邮箱和手机立即绑定

有条件地在熊猫中设置组的值python

有条件地在熊猫中设置组的值python

繁花不似锦 2021-03-23 22:15:15
我有一个包含以下各列的数据框:duration, cost, channel   2       180      TV1  1       200      TV2  2       300      TV3  1       nan      TV1  2       nan      TV2  2       nan      TV3  2       nan      TV1  1       40       TV2  1       nan      TV3一些成本值是nans,要填充它们,我需要执行以下操作:按渠道分组在一个渠道中,将可用成本相加,然后除以*次出现的次数(平均)重新分配该通道内所有行的值:如果持续时间= 1,费用=平均值* 1.5如果持续时间= 2,则费用=平均示例:TV2频道,我们有3个条目,其中一个条目的费用为零。因此,我需要执行以下操作:average = 200+40/3 = 80if duration = 1, cost = 80 * 1.5 = 120duration, cost, channel   2       180      TV1  1       120      TV2  2       300      TV3  1       nan      TV1  2       80       TV2  2       nan      TV3  2       nan      TV1  1       120      TV2  1       nan      TV3我知道我应该做df.groupby('channel')然后将功能应用于每个组。问题是,我不仅需要修改空值,而且如果1成本为空,则需要修改组中的所有成本值。
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

如果我正确理解您的问题,则需要以下内容:


def myfunc(group):


    # only modify cost if there are nan's

    if len(group) != group.cost.count():


        # set all cost values to the mean

        group['cost'] = group.cost.sum() / len(group)


        # multiply by 1.5 if the duration equals 1

        group['cost'][group.duration == 1] = group['cost'] * 1.5


    return group



df.groupby('channel').apply(myfunc)


   duration  cost channel

0         2    60     TV1

1         1   120     TV2

2         2   100     TV3

3         1    90     TV1

4         2    80     TV2

5         2   100     TV3

6         2    60     TV1

7         1   120     TV2

8         1   150     TV3


查看完整回答
反对 回复 2021-04-01
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

在新版本的Pandas中,代码应更改为


def myfunc(group):

    # only modify cost if there are nan's

    if len(group) != group.cost.count():


        # set all cost values to the mean

        group['cost'] = group.cost.sum() / len(group)


        # multiply by 1.5 if the duration equals 1

        _ = group.set_value(group[group.duration == 1].index, 'cost', group['cost'] * 1.5)


    return group


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信