สร้างคอลัมน์ในสองเงื่อนไขด้วยแพนด้า

ฉันใช้แพนด้าทำแบบฝึกหัดการวิเคราะห์ ฉันต้องการสร้างคอลัมน์ใหม่โดยค่าคือผลรวมของสองแถว ชุดข้อมูลเดิมมีดังนี้...

    Admit      Gender   Dept    Freq
0   Admitted    Male    A   512
1   Rejected    Male    A   313
2   Admitted    Female  A   89
3   Rejected    Female  A   19
4   Admitted    Male    B   353
5   Rejected    Male    B   207
6   Admitted    Female  B   17
7   Rejected    Female  B   8
8   Admitted    Male    C   120
9   Rejected    Male    C   205
10  Admitted    Female  C   202
11  Rejected    Female  C   391
12  Admitted    Male    D   138
13  Rejected    Male    D   279
14  Admitted    Female  D   131
15  Rejected    Female  D   244
16  Admitted    Male    E   53
17  Rejected    Male    E   138
18  Admitted    Female  E   94
19  Rejected    Female  E   299
20  Admitted    Male    F   22
21  Rejected    Male    F   351
22  Admitted    Female  F   24
23  Rejected    Female  F   317

ฉันต้องการสร้างคอลัมน์ใหม่โดยใช้กรอบข้อมูลต่อไปนี้...

    Dept    Gender  Freq
0   A   Female  108
1   A   Male    825
2   B   Female  25
3   B   Male    560
4   C   Female  593
5   C   Male    325
6   D   Female  375
7   D   Male    417
8   E   Female  393
9   E   Male    191
10  F   Female  341
11  F   Male    373

ฉันต้องการสร้างคอลัมน์ใหม่ในกรอบข้อมูลแรกโดยใช้คอลัมน์ Freq ของกรอบข้อมูลที่สอง ฉันต้องแทรกค่า 108 if Detp and Gender เหมือนกันในกรอบข้อมูลทั้งสอง Data Frame ใหม่ควรมีลักษณะเช่นนี้...

    Admit      Gender   Dept    Freq   Total
0   Admitted    Male    A   512        825
1   Rejected    Male    A   313        825
2   Admitted    Female  A   89         108
3   Rejected    Female  A   19         108
4   Admitted    Male    B   353        560
5   Rejected    Male    B   207        560
6   Admitted    Female  B   17         25
7   Rejected    Female  B   8          25 

ฉันได้ลองใช้รหัสต่อไปนี้แล้ว ...

for i in data.iterrows():
    for j in total_freq.iterrows():
        if i[1].Gender == total_freq.Gender & i[1].Dept == total_freq.Dept:
            data['Total'] = total_freq.Freq

ฉันได้รับข้อผิดพลาดต่อไปนี้... TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

ความช่วยเหลือใด ๆ ในการสร้างคอลัมน์ด้วยค่าที่ถูกต้อง?


person Gilbert    schedule 17.05.2017    source แหล่งที่มา


คำตอบ (2)


คุณสามารถใช้การแปลงร่าง

df['Total'] = df.groupby(['Dept', 'Gender']).Freq.transform('sum')

คุณได้รับ

    Admit   Gender  Dept    Freq    Total
0   Admitted    Male    A   512 825
1   Rejected    Male    A   313 825
2   Admitted    Female  A   89  108
3   Rejected    Female  A   19  108
4   Admitted    Male    B   353 560
5   Rejected    Male    B   207 560
6   Admitted    Female  B   17  25
7   Rejected    Female  B   8   25
8   Admitted    Male    C   120 325
9   Rejected    Male    C   205 325
10  Admitted    Female  C   202 593
11  Rejected    Female  C   391 593
12  Admitted    Male    D   138 417
13  Rejected    Male    D   279 417
14  Admitted    Female  D   131 375
15  Rejected    Female  D   244 375
16  Admitted    Male    E   53  191
17  Rejected    Male    E   138 191
18  Admitted    Female  E   94  393
19  Rejected    Female  E   299 393
20  Admitted    Male    F   22  373
21  Rejected    Male    F   351 373
22  Admitted    Female  F   24  341
23  Rejected    Female  F   317 341
person Vaishali    schedule 17.05.2017

คุณสามารถใช้ pandas.DataFrame.merge() เพื่อรวมผลรวมของคุณจาก dataframe ที่สองถึงตัวแรก ขั้นแรกให้เปลี่ยนชื่อความถี่เป็นผลรวม df

df1 = df1.rename(columns={'Freq':'Total'})
df_totals = pd.merge(df, df1['Total'], how='left', on=['Gender', 'Dept'])
person SimplySnee    schedule 17.05.2017