2017-12-29 1 views
1

Striker_Id으로 그룹화 된 두 개의 열과 그룹화 된 'Striker_Id'에 해당하는 'Batsman_Scored'의 합계를 갖는 다른 열을 만드는 새 데이터 프레임을 만들고 싶습니다.파이썬 데이터 프레임 하나의 열로 그룹화하고 다른 열의 합계를 얻는 방법

예는 :

enter image description here

Striker_ID Batsman_Scored 
1   0 
2   8 
... 
나는이 ball.groupby(['Striker_Id'])['Batsman_Scored'].sum()을 시도했지만 이것은 내가 무엇을 얻을 수 있습니다 :

Striker_Id 
1  0000040141000010111000001000020000004001010001... 
2  0000000446404106064011111011100012106110621402... 
3  0000121111114060001000101001011010010001041011... 
4  0114110102100100011010000000006010011001111101... 
5  0140016010010040000101111100101000111410011000... 
6  1100100000104141011141001004001211200001110111... 

합계가 아니며 모든 숫자 만 조인합니다. 대안은 무엇입니까?

+0

그들은 정수가 아니라 _ ​​문자열입니다. –

+0

문자열로 변환하는 이유는 내 모든 컬럼이'int'입니다. –

+0

컬럼에 숫자가 아닌 데이터가있을 가능성이 있습니다. 즉,'pd.to_numeric'을 사용할 수 없습니다. –

답변

1

어떤 이유로 열이 문자열로로드되었습니다.

df['Batsman_Scored'] = df['Batsman_Scored'].astype(int) 

또는 - 그래도 문제가 해결되지 않으면, 다음로드 한 후 정수로 변환

df = pd.read_csv('file.csv', converters={'Batsman_Scored' : int}) 

또는

df = pd.read_csv('file.csv', converters={'Batsman_Scored' : pd.to_numeric}) 

-를 CSV에서 그들을로드하는 동안, 변환기를 적용 시도 ,

df['Batsman_Scored'] = pd.to_numeric(df['Batsman_Scored'], errors='coerce') 

이제, 전자 GROUPBY 작동합니다 -

r = df.groupby('Striker_Id')['Batsman_Scored'].sum() 

데이터에 액세스하지 않고, 난 단지 추측 할 수 있습니다. 그러나 어떤 시점에서 귀하의 데이터에는 판다가 변환을 수행 할 수 없도록하는 숫자가 아닌 데이터가 포함되어있어 그 열이 문자열로 유지되는 결과를 초래할 것으로 보입니다. 당신이 실제로

df.col.str.isdigit().any() 

같은 것을 그것을로드 할 때까지 숫자가 아닌 항목이있는 경우 즉, 말씀 드리죠이 문제가 데이터를 정확하게 조금 어렵습니다. 이것은 정수에서만 작동하며, float 열은 이와 같이 디버깅 될 수 없습니다. 당신에게 모든 컬럼과 데이터 유형의 목록을 줄 것이다

df.dtypes 

-

또한, 열이 손상된 데이터를 가지고 무엇을 보는 또 다른 방법은 dtypes를 조회하는 것입니다. 이 열을 사용하여 구문 분석이 필요한 열을 파악하십시오. -

for c in df.columns[df.dtypes == object]: 
    print(c) 

그런 다음 위에서 설명한 방법을 적용하여 수정할 수 있습니다.

+0

이 방법이 효과가 있었지만 왜 그렇게 되었습니까? 또한 다른 숫자 필드가 같은 방식으로 엉망이되지 않는다는 것을 어떻게 알 수 있습니까? –

+2

@JaskaranSinghPuri 제 편집보기? 나는 당신의 데이터없이 추측 할 수 있습니다. –

관련 문제