简体   繁体   English

根据另一个 dataframe 中匹配值的行数创建新列

[英]Create new column based on number of rows matching value in another dataframe

I want to create new column based on the number of rows each fruit is present in df2.我想根据 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

The code that doesn't work:不起作用的代码:

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

You can try with crosstab then join您可以尝试使用crosstab然后join

s = pd.crosstab(df2.fruit_farmed, df2.year)
s = s.reindex(df1.Fruit_Name)
s.index=df1.index
df1 = df1.join(s)

Another way can be to groupby fruit_farmed, year and then unstack year.另一种方法可以是 groupby fruit_farmed, year 然后 unstack year。

import pandas as pd
df2 = pd.DataFrame([[2018,'John','Apple'],[2019,'Timo','Apple'], 
                   [2020,'Eva','Cherries'],[2020,'Frey','Banna'], 
                   [2018,'Ali','Apple']],
                   columns=['year','farmer','fruit_farmed'])

df1 = df2.groupby(['fruit_farmed','year']).count().unstack('year').reset_index().fillna(0)

#rename the columns
df1.columns = ['fruit_farmed','2018','2019','2020']
print(df1)

  fruit_farmed  2018  2019  2020
0        Apple   2.0   1.0   0.0
1        Banna   0.0   0.0   1.0
2     Cherries   0.0   0.0   1.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 根据另一个 dataframe 的匹配结果在 dataframe 中创建新列 - Create new column in a dataframe based on matching result of another dataframe 在数据框中创建一个新列,其增量编号基于另一列 - Create a new column in a dataframe with increment number based on another column Pandas 数据框根据另一列的条件创建新行 - Pandas dataframe create new rows based on condition from another column 基于具有匹配行的其他数据帧在数据帧上追加一个新列,并使用现有列中的值填充不匹配的列 - Append a new column on a dataframe based on other dataframe with matching rows and fill the non-matching ones with value from the existing column 熊猫:在一个数据框中创建新列,并根据与另一个数据框中的匹配键进行匹配 - Pandas: create new column in one dataframe with values based on matching key from another dataframe Pandas 根据另一个数据框中的匹配列填充新的数据框列 - Pandas populate new dataframe column based on matching columns in another dataframe 根据具有列值的行数拆分数据框 - Split dataframe based on number of rows with a column value 如何从单独的 DataFrame 中的匹配行值中提取列 header 并基于该列创建新列? - How to extract column header from matching row value in a separate DataFrame and create a new column based off that? 根据具有特定值的行创建一个新的数据框 - Create a new dataframe based on rows with a certain value 根据来自另一个熊猫数据框的列在熊猫数据框中创建新行 - Create new rows in a Pandas Dataframe based on a column from another pandas dataframe
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM