有一個 df_subject_tracker 有列 subject , tags_greater ,marks_lower 和 tags_to_be_given 和 df_students_marks 列名稱 subject , rol ,marks
使用df_students_marks資料框中的標記列如何查詢介于標記大和標記之間的標記。
如果標記落在它們之間,我們必須分配在df_marks_final資料幀中分配的marks_to_be_given列。如果標記不屬于這些范圍,那么我們必須分配為0
df_subject_tracker
subject marks_greater marks_lower marks_to_be_given
english 50 100 20
english 150 200 40
english 250 300 60
social 50 100 30
social 150 200 50
social 250 300 70
df_students_marks
name subject rol marks
mark english 123 75
mark social 123 75
tom english 124 20
tom social 124 289
df_marks_final
name subject rol marks alloted
mark english 123 75 20
mark social 123 75 20
tom english 124 20 0
tom social 124 289 70
試過這個:
df_subject_tracker.loc[(df_subject_tracker['marks_greater'] >= int(marks_greater)) & (df_subject_tracker['marks_greater'] <=int(marks_lower)),'alloted'] = int(marks_to_be_given)
uj5u.com熱心網友回復:
您可以合并兩個資料框,然后只保留和marks之間的行。marks_greatermarks_lower
# df1 <- df_subject_tracker
# df2 <- df_students_marks
df2['alloted'] = (
df2.reset_index().merge(df1, on='subject', how='left')
.query("marks.between(marks_greater, marks_lower, inclusive='left')")
.set_index('index')['marks_to_be_given'].reindex(df2.index, fill_value=0)
)
print(df2)
# Output
name subject rol marks alloted
0 mark english 123 75 20
1 mark social 123 75 30
2 tom english 124 20 0
3 tom social 124 289 70
一步步:
>>> out = df2.reset_index().merge(df1, on='subject', how='left')
index name subject rol marks marks_greater marks_lower marks_to_be_given
0 0 mark english 123 75 50 100 20
1 0 mark english 123 75 150 200 40
2 0 mark english 123 75 250 300 60
3 2 tom english 124 20 50 100 20
4 2 tom english 124 20 150 200 40
5 2 tom english 124 20 250 300 60
6 1 mark social 123 75 50 100 30
7 1 mark social 123 75 150 200 50
8 1 mark social 123 75 250 300 70
9 3 tom social 124 289 50 100 30
10 3 tom social 124 289 150 200 50
11 3 tom social 124 289 250 300 70
>>> out = out.query("marks.between(marks_greater, marks_lower, inclusive='left')")
index name subject rol marks marks_greater marks_lower marks_to_be_given
0 0 mark english 123 75 50 100 20
6 1 mark social 123 75 50 100 30
11 3 tom social 124 289 250 300 70
>>> out = out.set_index('index')['marks_to_be_given'].reindex(df2.index,fill_value=0)
0 20
1 30
2 0
3 70
Name: marks_to_be_given, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438701.html
標籤:Python python-3.x 熊猫 数据框
上一篇:為什么word_index的長度大于num_words?
下一篇:Laravel地圖示記不顯示?
