熊猫比较数据框并根据另一个数据框中相似行的数量更改列值

时间:2020-07-15 20:11:00

标签: python pandas numpy

假设我有两个数据框:

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中同一个人的出现次数增加计数列

此示例的例外输出:

    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,因为有Jacob的两个实例,将计数增加到2。请勿更改Sally和Mary的值,并保持相同的值。

我该怎么做?我曾尝试使用.loc,但无法弄清楚如何解释同一行的两个实例。这意味着即使df1中有两个Jacobs,我也只能让Jacob的计数增加一。

我尝试过

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

但是,这不能解释重复项。

2 个答案:

答案 0 :(得分:0)

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()

答案 1 :(得分:0)

value_counts +索引对齐。

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