2016-10-27 19 views
0

複数のデータフレームを使用してPythonで作成しようとすると、複数のシートにまたがるExcelのcountifsに相当します。複数の条件と複数のデータフレームを使用するpython pandas countifs

私は現在のデータフレームからの基準に基づいて別のデータフレーム上のレコードの新しい列数を必要とします。

私がPythonでやりたいことのExcel impression、またhereを参照してください。

私の目標は?

  • 試験日> =試験グレード> = 70
  • と試験日< =細部日
  • と日付
  • を登録して学生ID
  • によって学生データフレーム
  • にカウント試験

基本的には、Excelに相当するのは...

= COUNTIFS(概要$ B $ 1:!!!$ B $ 11 "> =" &詳細B2、 概要$ B $ 1:$ B $ 11 "< =" &詳細C2、 まとめ! $ C $ 1:$ C $ 11 "> =" & 70、 概要$ A $ 1:!!概要は、プライマリデータフレームである$ A $ 11 "=" &詳細A2)

... Detailはレコードを数えたいセカンダリデータフレームです。彼らは、複数のデータフレームをまたがらないので

私は、探していない、非常に何を:私の研究ではこれらの答えが見つかり

sum(1 for x in students['Student ID'] if x == 1) 
sum(1 for x in exams['Exam Grade'] if x >= 70) 

答えて

0

は、基本的には、2つのデータフレームを設定されてやりたいよ何のための情報やdf2を「合格した試験」のためにdf1言う:私は特異データフレームのための基本的なCOUNTIFSを作成することができました各試験の印。

は自分で開始するには、あなたはこのようなあなたのExcelファイルを読み込むことができます:あなたはセグメントdf2にしたいdf1に行ごとに次に

df1 = pd.read_excel('filename1.xlsx') 
df2 = pd.read_excel('filename2.xlsx') 

をし、セグメント化されたデータフレームの長さを取得します。

まずあなたはこのように行うことができた、DF1の各行のための情報のリストを作りたいかもしれませんが:

student_info = df1[['Student ID', 'Enrollment Date', 'Qualification Date']].values 

その後、あなたはこのような行を反復処理することができます

N_exams_passed = [] # Store counts for each student in a list 

for s_id, s_enroll, s_qual in student_info: 
    N_exams_passed.append(len(df2[(df2['Student ID']==s_id) & 
            (df2['Exam Date']>=s_enroll) & 
            (df2['Exam Date']<=s_qual) & 
            (df2['Grade']>=70)]) 
         ) 

そして、DF1に置き換える/列を追加します。

df1['Exams Passed'] = N_exams_passed 

wを適切にあなたの日付を比較するためにそれらを各パンダのデータフレームのdatetimeオブジェクトに変換する必要がありません。私はこれをあなたに任せます。ヒント:pd.to_datetime()機能を使用できます。

+0

ありがとうございます。それには決して到着しませんでした。 Excelと比較して急な学習曲線。 –

関連する問題