python - 根据另一个数据框中匹配值的行数创建新列
问题描述
我想根据 df2 中每个水果的行数创建新列。
Expected Output of df1
No | Fruit_Name | 2018 | 2019 | 2020
1 | Apple | 2 | 1 | 0
2 | Banana | 0 | 0 | 1
3 | Cherries | 0 | 0 | 1
df1 df2
No | Fruit_Name | year | farmer | fruit_farmed
1 | Apple | 2018 | John | Apple
2 | Banana | 2019 | Timo | Apple
3 | Cherries | 2020 | Eva | Cherries
2020 | Frey | Banana
2018 | Ali | Apple
不起作用的代码:
i=0
for i in range(3):
df1['2018'] = len(df2.loc[df2['fruit_farmed'] == df1['Fruit_Name'][i]])
df1['2019'] = len(df2.loc[df2['fruit_farmed'] == df1['Fruit_Name'][i]])
df1['2020'] = len(df2.loc[df2['fruit_farmed'] == df1['Fruit_Name'][i]])
i=i+1
Output:
No Fruit_Name 2018 2019 2020
0 1 Apple 1 1 1
1 2 Banana 1 1 1
2 3 Cherries 1 1 1
解决方案
crosstab
你可以试试join
s = pd.crosstab(df2.fruit_farmed, df2.year)
s = s.reindex(df1.Fruit_Name)
s.index=df1.index
df1 = df1.join(s)
推荐阅读
- javascript - Vue.js 插槽 - 如何在计算属性中检索插槽内容
- julia - Julia VegaLite.jl - 如何禁用警告?
- php - Json_encode 奇怪的行为
- python - 使用现有列将百分比更改列添加到 csv 文件
- powerbi - Power Bi - 在不同表(参考表)中查找值并返回 True
- azure - 如何在 Azure 的 Ubuntu 虚拟机中将 http 端口重定向到 Docker
- isabelle - 替换 Isabelle/HOL Isar 证明中的变量
- vue.js - 我什么时候应该使用mounted和created?
- java - String.format() 在我的代码的 return 语句中做了什么?
- javascript - 使用 Tensorflow.js 进行非线性指数回归