簡體   English   中英

Pandas 比較數據幀並根據另一個 dataframe 中的相似行數更改列值

[英]Pandas comparing dataframes and changing column value based on number of similar rows in another dataframe

假設我有兩個數據框:

df1:

    Person Number Type
0   Kyle   12     Male
1   Jacob  15     Male
2   Jacob  15     Male

df2:具有類似格式的更大數據集,除了有一個計數列需要基於 df1 遞增

    Person Number Type    Count 
0   Kyle   12     Male    0
1   Jacob  15     Male    0
3   Sally  43     Female  0
4   Mary   15     Female  5

我要做的是根據 df1 中同一個人的出現次數增加計數列

此示例的 output 除外:

    Person Number  Type    Count 
0   Kyle   12     Male    1
1   Jacob  15     Male    2
3   Sally  43     Female  0
4   Mary   15     Female  5

將 Kyle 的計數增加到 1,因為有一個實例,將計數增加到 2,因為 Jacob 有兩個實例。 不要更改 Sally 和 Mary 的值並保持該值不變。

我該怎么做呢? 我試過 using.loc 但我不知道如何解釋同一行的兩個實例。 這意味着即使 df1 中有兩個 Jacobs,我也只能讓 Jacob 的計數增加一。

我努力了

df2.loc[df2['Person'].values == df1['Person'].values, 'Count'] += 1

但是,這不考慮重復。

df1 = df1.groupby(df.columns.tolist(), as_index=False).size().to_frame('Count').reset_index()

df1 = df1.set_index(['Person','Number','Type'])
df2 = df2.set_index(['Person','Number','Type'])

df1.add(df2, fill_value=0).reset_index()

或者

df1 = df1.groupby(df.columns.tolist(), as_index=False).size().to_frame('Count').reset_index()
df2.merge(df1, on=['Person','Number','Type'], how='left').set_index(['Person','Number','Type']).sum(axis=1).to_frame('Count').reset_index()

value_counts + 索引 alignment。

u = df2.set_index("Person")
u.assign(Count=df1["Person"].value_counts().add(u["Count"], fill_value=0))

        Number    Type  Count
Person
Kyle        12    Male    1.0
Jacob       15    Male    2.0
Sally       43  Female    0.0
Mary        15  Female    5.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM