pandas - 如何根据其他两列的值设置列?
问题描述
我有一本总计字典:
totals = {('china', 1990): 12345, ('china', 1999): 6789, ('mexico', 1989): 98765}
和一个数据框df
:
country year
china 1990
china 1999
mexico 1989
....
我想totals
根据上面的字典添加一个新列。我试过这个,但它不起作用:
df['total'] = df[['country', 'year']].apply(lambda x: totals[x])
这样做的正确方法是什么?
解决方案
第一个想法是Index.map
使用MultiIndex
with DataFrame.set_index
:
df['total'] = df.set_index(['country', 'year']).index.map(totals)
或创建Series
和使用DataFrame.join
:
df = df.join(pd.Series(totals, name='total'), on=['country', 'year'])
print (df)
country year total
0 china 1990 12345
1 china 1999 6789
2 mexico 1989 98765
推荐阅读
- java - 为什么 okhttp3 client.execute 不起作用?
- angular - 运行 ng xi18n 我收到此错误:“无法读取属性 'loadChildren' of null 中的错误”
- scala - Scala在具有相同父级的两个类上实例化公共val
- c++ - 关于模板和虚函数的问题
- typescript - 如何键入“this”以便在子类上调用方法时正确?
- avfoundation - 是否可以在 AVMutableComposition 上同时使用 CIFilter 和 GPUImage 过滤器?
- asp.net - 带有列表的 EF Core 更新
- php - mysql_query($query, $connection) 与 mysqli_query($connection, $query)
- python - “NoneType”对象不可调用 Python
- docker - 在没有 Jenkinsfile 的 Jenkins 中与 Docker 并行运行 Cypress