ज़रूर! सेट अप:
>>> import pandas as pd
>>> from random import randint
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in range(10)],
'B': [randint(1, 9)*10 for x in range(10)],
'C': [randint(1, 9)*100 for x in range(10)]})
>>> df
A B C
0 9 40 300
1 9 70 700
2 5 70 900
3 8 80 900
4 7 50 200
5 9 30 900
6 2 80 700
7 2 80 400
8 5 80 300
9 7 70 800
हम कॉलम संचालन को लागू कर सकते हैं और बूलियन श्रृंखला वस्तुएँ प्राप्त कर सकते हैं:
>>> df["B"] > 50
0 False
1 True
2 True
3 True
4 False
5 False
6 True
7 True
8 True
9 True
Name: B
>>> (df["B"] > 50) & (df["C"] == 900)
0 False
1 False
2 True
3 True
4 False
5 False
6 False
7 False
8 False
9 False
[अद्यतन, नई शैली पर स्विच करने के लिए .loc]:
और फिर हम ऑब्जेक्ट में इंडेक्स करने के लिए इनका उपयोग कर सकते हैं। रीड एक्सेस के लिए, आप इंडेक्स को चेन कर सकते हैं:
>>> df["A"][(df["B"] > 50) & (df["C"] == 900)]
2 5
3 8
Name: A, dtype: int64
लेकिन लेखन की पहुंच के लिए ऐसा करने वाले एक दृश्य और कॉपी के बीच अंतर के कारण आप खुद को परेशानी में डाल सकते हैं। आप .locइसके बजाय उपयोग कर सकते हैं :
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"]
2 5
3 8
Name: A, dtype: int64
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"].values
array([5, 8], dtype=int64)
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"] *= 1000
>>> df
A B C
0 9 40 300
1 9 70 700
2 5000 70 900
3 8000 80 900
4 7 50 200
5 9 30 900
6 2 80 700
7 2 80 400
8 5 80 300
9 7 70 800
ध्यान दें कि मैंने गलती से टाइप किया == 900और नहीं != 900, या ~(df["C"] == 900), लेकिन मैं इसे ठीक करने के लिए बहुत आलसी हूं। पाठक के लिए व्यायाम करें। : ^)
df.queryऔरpd.evalइस उपयोग के मामले के लिए अच्छा लगता है।pd.eval()फ़ंक्शंस के परिवार, उनकी विशेषताओं और उपयोग के मामलों की जानकारी के लिए, कृपया pd.eval () का उपयोग करके पांडा में डायनेमिक एक्सप्रेशन मूल्यांकन का दौरा करें ।