2016-11-21 74 views
1

我有以下數據框,列中有一些值:ID'重複。 我想組由datafarmepandas groupby on dataframe and assigning back to orignal df failed with transform

df = pd.DataFrame(
    {'Score': [0.65, 0.57, 0.56, 0.689, 0.56, 0.85, 0.45, 0.15, 0.14, 0.4678], 
    'ID': ['AAA', 'BBB', 'SAS', 'SAP', 'TCS', 'BBB', 'CTC', 'CTC', 'CTC', 'CTC'], 
    'Sample': ['AE01', 'AE01', 'AE03', 'AE03', 'AE03', 'AE05', 'AE05', 'AE05', 'AE05', 'AE05'], 
    'Freq': [1, 14, 14, 15, 16, 17, 18, 19, 20, 21], 
    'Type': ['Non', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND']}, 
    columns=['Sample','ID','Type','Score','Freq']) 

當我嘗試向組通過選擇添加「再」列得到它通過以下使用transform

df['Re']=df.drop_duplicates(['Sample','ID']).groupby(['ID']).transform(size) 
的單行分配給原始數據幀DF

我收到以下錯誤,

ValueError: Wrong number of items passed 4, placement implies 1 

我知道我可以做合併獲得通過的結果分配給該組的原始數據幀,但我當做合併我得到特定的行重複多次在原來的DF,我不需要。任何更好的解決方案都會很棒。 謝謝

回答

1

我想你需要先分配到的drop_duplicatesDataFrame輸出,因爲很明顯,drop_duplicates去除一些重複的行(如果存在的話),所以不能將新列Re分配到原df

另一個問題是需要爲groupby添加Series[],因爲transform只與Series一起使用。如果使用size,則可以使用一些不用於分組的列,這裏是ID

df = df.drop_duplicates(['Sample','ID']) 
df['Re']= df.groupby(['ID'])['Sample'].transform('size') 
print (df) 
    Sample ID Type Score Freq Re 
0 AE01 AAA Non 0.650  1 1 
1 AE01 BBB IND 0.570 14 2 
2 AE03 SAS IND 0.560 14 1 
3 AE03 SAP IND 0.689 15 1 
4 AE03 TCS IND 0.560 16 1 
5 AE05 BBB IND 0.850 17 2 
6 AE05 CTC IND 0.450 18 1 

df = df.drop_duplicates(['Sample','ID']) 
df['Re']= df.groupby(['ID'])['Type'].transform('size') 
print (df) 
    Sample ID Type Score Freq Re 
0 AE01 AAA Non 0.650  1 1 
1 AE01 BBB IND 0.570 14 2 
2 AE03 SAS IND 0.560 14 1 
3 AE03 SAP IND 0.689 15 1 
4 AE03 TCS IND 0.560 16 1 
5 AE05 BBB IND 0.850 17 2 
6 AE05 CTC IND 0.450 18 1 

如果不分配,得到NaN

df['Re']= df.drop_duplicates(['Sample','ID']).groupby(['ID'])['Sample'].transform('size') 
print (df) 
    Sample ID Type Score Freq Re 
0 AE01 AAA Non 0.6500  1 1.0 
1 AE01 BBB IND 0.5700 14 2.0 
2 AE03 SAS IND 0.5600 14 1.0 
3 AE03 SAP IND 0.6890 15 1.0 
4 AE03 TCS IND 0.5600 16 1.0 
5 AE05 BBB IND 0.8500 17 2.0 
6 AE05 CTC IND 0.4500 18 1.0 
7 AE05 CTC IND 0.1500 19 NaN 
8 AE05 CTC IND 0.1400 20 NaN 
9 AE05 CTC IND 0.4678 21 NaN 
+0

謝謝你的作品:) – user1017373

+0

很高興能幫助你! – jezrael

相關問題