pandas 0.23 - pandas.merge_asof()

pandas.merge_asof




pandas

pandas.merge_asof

pandas.merge_asof(left, right, on=None, left_on=None, right_on=None, left_index=False, right_index=False, by=None, left_by=None, right_by=None, suffixes=('_x', '_y'), tolerance=None, allow_exact_matches=True, direction='backward') [source]

एक मर्ज मर्ज करें। यह एक ले-जॉइन के समान है सिवाय इसके कि हम समान कुंजी के बजाय निकटतम कुंजी पर मेल खाते हैं।

दोनों डेटाफ्रेम को कुंजी द्वारा क्रमबद्ध किया जाना चाहिए।

बाएं डेटाफ़्रेम में प्रत्येक पंक्ति के लिए:

  • एक "पिछड़ी" खोज सही डेटाफ़्रेम में अंतिम पंक्ति का चयन करती है जिसका 'ऑन' कुंजी बाईं ओर की कुंजी से कम या बराबर है।
  • एक "फॉरवर्ड" खोज सही डेटाफ्रैम में पहली पंक्ति का चयन करती है जिसका 'ऑन' कुंजी बाईं ओर की कुंजी से अधिक या बराबर है।
  • एक "निकटतम" खोज सही DataFrame में पंक्ति का चयन करती है जिसका 'ऑन' कुंजी बाईं ओर की कुंजी के लिए पूर्ण दूरी में निकटतम है।

डिफ़ॉल्ट "पिछड़ा" है और 0.20.0 से नीचे के संस्करणों में संगत है। दिशा पैरामीटर 0.20.0 संस्करण में जोड़ा गया था और "आगे" और "निकटतम" का परिचय देता है।

वैकल्पिक रूप से 'पर' के साथ खोज करने से पहले 'द्वारा' के साथ समकक्ष कुंजी पर मेल खाते हैं।

संस्करण में नया 0.19.0।

पैरामीटर:
left : DataFrame
right : DataFrame

on : लेबल

फ़ील्ड नाम पर शामिल होने के लिए। दोनों DataFrames में पाया जाना चाहिए। डेटा का आदेश दिया जाना चाहिए। इसके अलावा यह एक संख्यात्मक स्तंभ होना चाहिए, जैसे डेटाेटिमलाइक, पूर्णांक या फ्लोट। पर या बाएँ_ऑन / राइट_ऑन दिया जाना चाहिए।

left_on : लेबल

बाएं डेटाफ़्रेम में शामिल होने के लिए फ़ील्ड नाम।

right_on : लेबल

सही DataFrame में शामिल होने के लिए फ़ील्ड नाम।

left_index : बूलियन

शामिल होने के कुंजी के रूप में बाएं DataFrame के सूचकांक का उपयोग करें।

संस्करण में नया 0.19.2।

right_index : बूलियन

Join key के रूप में सही DataFrame के index का उपयोग करें।

संस्करण में नया 0.19.2।

द्वारा : स्तंभ नाम या स्तंभ नामों की सूची

मर्ज ऑपरेशन करने से पहले इन कॉलम पर मिलान करें।

बायां_बी : कॉलम नाम

बाएं डेटाफ़्रेम में मेल खाने के लिए फ़ील्ड नाम।

संस्करण में नया 0.19.2।

right_by : कॉलम नाम

फ़ील्ड का नाम दाएं डेटाफ़्रेम में मिलान करने के लिए।

संस्करण में नया 0.19.2।

प्रत्यय : 2-लंबाई अनुक्रम (टपल, सूची,…)

क्रमशः बाएँ और दाएँ पक्ष में ओवरलैपिंग कॉलम नामों पर लागू करने के लिए प्रत्यय।

सहिष्णुता : पूर्णांक या समयबद्धता, वैकल्पिक, डिफ़ॉल्ट कोई नहीं

इस सीमा के भीतर asof सहिष्णुता का चयन करें; मर्ज इंडेक्स के साथ संगत होना चाहिए।

allow_exact_matches : बूलियन, डिफ़ॉल्ट सही

  • यदि सही है, तो उसी के साथ 'मान' (यानी कम-से-या-के-बराबर / अधिक से अधिक-या-बराबर-से) के साथ मेल खाने की अनुमति दें
  • यदि गलत है, तो समान 'मूल्य' पर मेल न करें (यानी, सख्ती से कम-से-अधिक / सख्ती से अधिक)

दिशा : 'पिछड़ा' (डिफ़ॉल्ट), 'आगे', या 'निकटतम'

चाहे पहले, बाद में, या निकटतम मैचों की खोज करना हो।

संस्करण में नया 0.20.0।

यह दिखाता है:
merged : DataFrame

यह भी देखें

merge , merge_ordered

उदाहरण

>>> left = pd.DataFrame({'a': [1, 5, 10], 'left_val': ['a', 'b', 'c']})
>>> left
    a left_val
0   1        a
1   5        b
2  10        c
>>> right = pd.DataFrame({'a': [1, 2, 3, 6, 7],
...                       'right_val': [1, 2, 3, 6, 7]})
>>> right
   a  right_val
0  1          1
1  2          2
2  3          3
3  6          6
4  7          7
>>> pd.merge_asof(left, right, on='a')
    a left_val  right_val
0   1        a          1
1   5        b          3
2  10        c          7
>>> pd.merge_asof(left, right, on='a', allow_exact_matches=False)
    a left_val  right_val
0   1        a        NaN
1   5        b        3.0
2  10        c        7.0
>>> pd.merge_asof(left, right, on='a', direction='forward')
    a left_val  right_val
0   1        a        1.0
1   5        b        6.0
2  10        c        NaN
>>> pd.merge_asof(left, right, on='a', direction='nearest')
    a left_val  right_val
0   1        a          1
1   5        b          6
2  10        c          7

हम अनुक्रमित DataFrames का भी उपयोग कर सकते हैं।

>>> left = pd.DataFrame({'left_val': ['a', 'b', 'c']}, index=[1, 5, 10])
>>> left
   left_val
1         a
5         b
10        c
>>> right = pd.DataFrame({'right_val': [1, 2, 3, 6, 7]},
...                      index=[1, 2, 3, 6, 7])
>>> right
   right_val
1          1
2          2
3          3
6          6
7          7
>>> pd.merge_asof(left, right, left_index=True, right_index=True)
   left_val  right_val
1         a          1
5         b          3
10        c          7

यहाँ एक वास्तविक दुनिया बार-श्रृंखला उदाहरण है

>>> quotes
                     time ticker     bid     ask
0 2016-05-25 13:30:00.023   GOOG  720.50  720.93
1 2016-05-25 13:30:00.023   MSFT   51.95   51.96
2 2016-05-25 13:30:00.030   MSFT   51.97   51.98
3 2016-05-25 13:30:00.041   MSFT   51.99   52.00
4 2016-05-25 13:30:00.048   GOOG  720.50  720.93
5 2016-05-25 13:30:00.049   AAPL   97.99   98.01
6 2016-05-25 13:30:00.072   GOOG  720.50  720.88
7 2016-05-25 13:30:00.075   MSFT   52.01   52.03
>>> trades
                     time ticker   price  quantity
0 2016-05-25 13:30:00.023   MSFT   51.95        75
1 2016-05-25 13:30:00.038   MSFT   51.95       155
2 2016-05-25 13:30:00.048   GOOG  720.77       100
3 2016-05-25 13:30:00.048   GOOG  720.92       100
4 2016-05-25 13:30:00.048   AAPL   98.00       100

डिफ़ॉल्ट रूप से हम उद्धरणों का asof ले रहे हैं

>>> pd.merge_asof(trades, quotes,
...                       on='time',
...                       by='ticker')
                     time ticker   price  quantity     bid     ask
0 2016-05-25 13:30:00.023   MSFT   51.95        75   51.95   51.96
1 2016-05-25 13:30:00.038   MSFT   51.95       155   51.97   51.98
2 2016-05-25 13:30:00.048   GOOG  720.77       100  720.50  720.93
3 2016-05-25 13:30:00.048   GOOG  720.92       100  720.50  720.93
4 2016-05-25 13:30:00.048   AAPL   98.00       100     NaN     NaN

हम केवल उद्धरण समय और व्यापार समय के बीच 2ms के भीतर ही हैं

>>> pd.merge_asof(trades, quotes,
...                       on='time',
...                       by='ticker',
...                       tolerance=pd.Timedelta('2ms'))
                     time ticker   price  quantity     bid     ask
0 2016-05-25 13:30:00.023   MSFT   51.95        75   51.95   51.96
1 2016-05-25 13:30:00.038   MSFT   51.95       155     NaN     NaN
2 2016-05-25 13:30:00.048   GOOG  720.77       100  720.50  720.93
3 2016-05-25 13:30:00.048   GOOG  720.92       100  720.50  720.93
4 2016-05-25 13:30:00.048   AAPL   98.00       100     NaN     NaN

हम केवल बोली समय और व्यापार समय के बीच 10ms के भीतर और हम समय पर सटीक मैचों को बाहर करते हैं। हालाँकि पूर्व डेटा आगे प्रचारित करेगा

>>> pd.merge_asof(trades, quotes,
...                       on='time',
...                       by='ticker',
...                       tolerance=pd.Timedelta('10ms'),
...                       allow_exact_matches=False)
                     time ticker   price  quantity     bid     ask
0 2016-05-25 13:30:00.023   MSFT   51.95        75     NaN     NaN
1 2016-05-25 13:30:00.038   MSFT   51.95       155   51.97   51.98
2 2016-05-25 13:30:00.048   GOOG  720.77       100     NaN     NaN
3 2016-05-25 13:30:00.048   GOOG  720.92       100     NaN     NaN
4 2016-05-25 13:30:00.048   AAPL   98.00       100     NaN     NaN