【问题标题】:Create a column that divides the other 2 columns using Pandas Apply()使用 Pandas Apply() 创建一个将其他 2 列分开的列
【发布时间】:2021-02-21 00:17:32
【问题描述】:

给定一个数据集 -

country     year    cases   population
Afghanistan 1999    745     19987071
Brazil      1999    37737   172006362
China       1999    212258  1272915272
Afghanistan 2000    2666    20595360
Brazil      2000    80488   174504898
China       2000    213766  1280428583

任务是使用 pandas 应用函数在一个名为“流行”的新列中获取病例与人口的比率

这是我写的

def calc_prevalence(G):
    assert 'cases' in G.columns and 'population' in G.columns

    G_copy = G.copy()
    G_copy['prevalence'] = G_copy['cases','population'].apply(lambda x: (x['cases']/x['population']))
    display(G_copy)

但我得到了一个

KeyError: ('cases', 'population')

【问题讨论】:

  • 简单的G['prevalence'] = G['cases']/G['population']...

标签: python pandas lambda apply


【解决方案1】:

这是一个不使用 lambda 将命名函数应用于数据帧的解决方案:

def calculate_ratio(row):
    return row['cases']/row['population']

df['prevalence'] = df.apply(calculate_ratio, axis = 1)

print(df)
#output:
       country  year   cases  population  prevalence
0  Afghanistan  1999     745    19987071    0.000037
1       Brazil  1999   37737   172006362    0.000219
2        China  1999  212258  1272915272    0.000167
3  Afghanistan  2000    2666    20595360    0.000129
4       Brazil  2000   80488   174504898    0.000461
5        China  2000  213766  1280428583    0.000167

【讨论】:

    【解决方案2】:

    首先,除非出于某种原因明确告知您在此处使用 apply 函数,否则您可以在列本身上调用该操作,从而实现更快的矢量化操作。即;

    G_copy['prevalence']=G_copy['cases']/G_copy['population']
    

    最后,如果由于某种原因必须使用apply,请在df上应用而不是两个系列;

    G_copy['prevalence']=G_copy.apply(lambda row: row['cases']/row['population'],axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2017-08-26
      相关资源
      最近更新 更多