我有一個像這樣的簡單資料框:
df = pd.DataFrame({'class':['a','b','c','d','e'],
'name':['Adi','leon','adi','leo','andy'],
'age':['9','8','9','9','8'],
'score':['40','90','35','95','85']})
然后結果是這樣的
class name age score
a Adi 9 40
b leon 8 90
a adi 9 35
d leo 9 95
e andy 8 85
我如何在同一列中將名為“Adi”的行與“adi”結合起來,而他只有一個人,而“Adi”的分數是 75,而不是 40 和 35
uj5u.com熱心網友回復:
您可以在第一次將列設為小寫之后使用and :pandas.DataFrame.groupbypandas.DataFrame.aggregatename
import pandas as pd
df = pd.DataFrame({
'class': ['a', 'b', 'c', 'd', 'e'],
'name': ['Adi', 'leon', 'adi', 'leo', 'andy'],
'age': ['9', '8', '9', '9', '8'],
'score': ['40', '90', '35', '95', '85']
})
df['name'] = df['name'].str.lower()
df['score'] = df['score'].astype(int)
aggregate_funcs = {
'class': lambda s: ', '.join(set(s)),
'age': lambda s: ', '.join(set(s)),
'score': sum
}
df = df.groupby(df['name']).aggregate(aggregate_funcs)
print(df)
輸出:
class age score
name
adi c, a 9 75
andy e 8 85
leo d 9 95
leon b 8 90
uj5u.com熱心網友回復:
drop_duplicates() 如果您使用熊貓,這是最好的方法
df['name'] = df['name'].str.lower()
df['score'] = df['score'].astype(int)
df['score'] = df['score'].groupby(df['name']).transform(sum)
df.drop_duplicates(subset='name',keep='first',inplace=True)
輸出:
class name age score
0 a adi 9 75
1 b leon 8 90
3 d leo 9 95
4 e andy 8 85
如果您設定,您將獲得此輸出keep='last':
class name age score
1 b leon 8 90
2 c adi 9 75
3 d leo 9 95
4 e andy 8 85
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/406625.html
標籤:
