2016-11-21 4 views
1

열에 특정 값이있는 '다음 데이터 프레임이 있습니다.'반복됩니다. 나는 데이터 프레임에 pandas groupby가 변환과 함께 실패하고 orignal df에 다시 할당됩니다.

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) 
를 사용하여 한 줄에 따라 원래의 dataframe 안양에 ​​할당받을 수있는 datafarme에 의해 그룹화 할 나는 다음과 같은 오류를 얻고있다

,

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

가 나는 결과에 의해 그룹에 할당 된 원래 dataframe를 얻기 위해 병합 할 수 알지만 때 내가 필요하지 않은 원본 df에서 여러 번 반복되는 특정 행을 가져 오는 병합을 수행합니다. 더 나은 해결책이 될 것입니다. 는 (있는 경우) 분명히 drop_duplicates 일부 중복 행을 제거하기 때문에, 당신이 drop_duplicates의 새로운 DataFrame 출력에 할당 첫번째 필요가 있다고 생각하면

답변

1

감사, 그래서 원래 df에 새 열 Re을 할당 할 수 없습니다.

transformSeries과 만 작동하므로 또 다른 문제는 Series ~ []을 groupby에 추가해야합니다. 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