我有这个数据框,如果我有重复的行,如果它们完全相同(梅赛德斯exp),我怎样才能做出条件,我只保留一个(不求和)或者如果有一个求和(起亚案例)租金/售价差异
Df 示例
cars rent sale
Kia 1 2
Bmw 1 4
Mercedes 2 1
Ford 1 1
Kia 4 5
Mercedes 2 1
Run Code Online (Sandbox Code Playgroud)
我写这段代码:
import pandas as pd
df=pd.DataFrame({'cars':['Kia','Bmw','Mercedes','Ford','Kia','Mercedes'],
'rent':[1,1,2,1,4,2],
'sale':[2,4,1,1,5,1]})
df=df.groupby(['cars']).sum().reset_index()
print(df)
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
cars rent sale
0 Bmw 1 4
1 Ford 1 1
2 Kia 5 7
3 Mercedes 4 2
Run Code Online (Sandbox Code Playgroud)
预期输出:
cars rent sale
0 Kia 5 7
1 Bmw 1 4
2 Mercedes 2 1
3 Ford 1 1
Run Code Online (Sandbox Code Playgroud)
DataFrame.drop_duplicates在聚合之前使用sum- 这会在所有列中一起查找重复项:
df1 = df.drop_duplicates().groupby('cars', sort=False, as_index=False).sum()
print(df1)
cars rent sale
0 Kia 5 7
1 Bmw 1 4
2 Mercedes 2 1
3 Ford 1 1
Run Code Online (Sandbox Code Playgroud)
如果需要指定用于检查重复项的列:
df1 = (df.drop_duplicates(['cars','rent','sale'])
.groupby('cars', sort=False, as_index=False)
.sum())
Run Code Online (Sandbox Code Playgroud)
但如果需要单独删除每列的重复项,请使用带有np.uniqueand的 lambda 函数sum:
df=pd.DataFrame({'cars':['Kia','Bmw','Mercedes','Ford','Kia','Mercedes'],
'rent':[1,1,2,1,4,2],
'sale':[2,4,1,1,5,5]})
print(df)
cars rent sale
0 Kia 1 2
1 Bmw 1 4
2 Mercedes 2 1
3 Ford 1 1
4 Kia 4 5
5 Mercedes 2 5 <- changed 5
df2 = df.groupby('cars', sort=False, as_index=False).agg(lambda x: np.unique(x).sum())
print(df2)
cars rent sale
0 Kia 5 7
1 Bmw 1 4
2 Mercedes 2 6
3 Ford 1 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |