我有一個數據框,其中行有一個名稱,一個類型和一個SLA列。 SLA列是一個數字值:1,2或3.SLA列專用於輸入,而不是名稱。新Pandas Groupby API更改
我有創建一個新列的代碼,它按名稱值進行分組,併爲所有具有相同名稱的行強制使用相同的數值。即如果給定名稱的所有SLA值都是2,那麼它們都會得到2.如果它們都是3,那麼它們會得到3.否則(如果所有值都是2或更多可能性,如果有混合值),它們都會得到2.
df['SLA_Norm'] = df.groupby('Name').apply(assignSLA)
使用功能:
def assignSLA(df):
a = pd.Series(df['SLA'], df.index)
m = a.mean()
if m == 1.0:
n = [1]
n = n*len(a)
return pd.Series(n, df.index)
elif m == 3.0:
n = [3]
n = n*len(a)
return pd.Series(n, df.index)
else:
n = [2]
n = n*len(a)
return pd.Series(n, df.index)
更新大熊貓庫,它最近更新了GROUPBY API,該功能後休息。但是,我無法弄清楚爲什麼。有誰知道爲什麼熊貓中的新groupby功能會打破這個功能?
謝謝親切。
編輯:
於是開始用df:
Name Type SLA
Foo A 1
Foo B 2
Foo C 3
Buzz A 1
Buzz A 1
Buzz A 1
Buzz A 1
Buzz A 1
Bar C 3
Bar C 3
Bar C 3
我用得到,用大熊貓13.0:
Name Type SLA SLA_Norm
Foo A 1 2
Foo B 2 2
Foo C 3 2
Buzz A 1 1
Buzz A 1 1
Buzz A 1 1
Buzz A 1 1
Buzz A 1 1
Bar C 3 3
Bar C 3 3
Bar C 3 3
現在我得到的,與大熊貓14.0:
Name Type SLA SLA_Norm
Foo A 1 NaN
Foo B 2 NaN
Foo C 3 NaN
Buzz A 1 NaN
Buzz A 1 NaN
Buzz A 1 NaN
Buzz A 1 NaN
Buzz A 1 NaN
Bar C 3 NaN
Bar C 3 NaN
Bar C 3 NaN
你會發佈一個完整的起始幀,什麼版本你開啓以及更改了哪個版本。 API向後兼容。所以不知道什麼是'破' – Jeff 2014-10-03 20:10:50
將更新與所有這些信息的問題。恭敬地說,這個函數連續成功運行了幾百天,然後在更新熊貓時立即停止運行。 – humbug 2014-10-03 20:12:17
編輯名稱以擺脫'破'的語言,不要試圖污染圖書館,使我的工作成爲可能。 – humbug 2014-10-03 20:30:32