शर्तों के आधार पर एक ही पांडा डेटाफ्रेम में एक ही कॉलम के दो मानों के बीच अंतर प्राप्त करें - पायथन, पांडा, डेटाफ्रेम, मिनट

मेरे पास प्रारूप का एक पांडा डेटाफ्रेम डीएफ 1 है:

df1.head()

action id     ts
0   A   3   2016-01-28 06:14:08.249000
1   B   3   2016-01-28 07:08:49.901000
2   A   4   2016-01-28 10:42:27.228000
3   B   4   2016-01-29 04:15:33.724000
4   B   4   2016-01-29 04:20:33.724000
5   A   5   2016-01-28 11:12:51.892000

डेटा प्रकार के कॉलम: (क्रिया: स्ट्रिंग, आईडी: int, ts: श्रृंखला (स्ट्रिंग से इसे बदलने के लिए pandas.to_datetime () का उपयोग किया जाता है))

मैं जो चाहता हूं वह एक नया स्तंभ हैडेटाफ्रेम / एक और श्रृंखला जिसमें एक ही आईडी के एक्शन "ए" और एक्शन "बी" के बीच समय अंतर होता है। केवल एक चीज है, मुझे कार्रवाई के पहले मौके की आवश्यकता है "ए" जैसा कि min(ts) प्रत्येक आईडी के लिए और फिर घटाए गए मान के कारण कार्रवाई "बी" कार्रवाई के बाद "बी" होनी चाहिए, मुझे कार्रवाई "ए" और एक्शन "बी" की पहली घटना के बीच विलंबता निर्धारित करने की आवश्यकता है।

मैं इसे इस्तेमाल करने में सक्षम था groupby(), merge() तथा unstack() लेकिन मैं नहीं मिल सका min(ts) इसमें।

अग्रिम में धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 1

इसे प्राप्त करने का एक तरीका ऐसा कुछ होगा:

In [87]: df
Out[87]:
action  id                      ts
0      B   3 2016-01-28 06:14:08.249
1      A   3 2016-01-28 07:08:49.901
2      A   4 2016-01-28 10:42:27.228
3      B   4 2016-01-29 04:15:33.724
4      B   4 2016-01-29 04:20:33.724
5      B   5 2016-01-28 11:12:51.892

In [88]: grp = df.groupby(["id"])

In [89]: grp.apply(lambda x: x[x["action"] == "B"].ts.max()) - 
....: grp.apply(lambda x: x[x["action"] == "A"].ts.min())
Out[89]:
id
3   -1 days +23:05:18.348000
4            17:38:06.496000
5                        NaT
dtype: timedelta64[ns]

नोट: कृपया अपने नमूना डेटा सेट - एक्शन पर ध्यान दें B आईडी के लिए 3 कार्रवाई से पहले हुआ था A

यदि आप नाइट को खत्म करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं .dropna():

In [82]: result = (grp.apply(lambda x: x[x["action"] == "B"].ts.max()) - 
....:           grp.apply(lambda x: x[x["action"] == "A"].ts.min())).dropna()

In [83]: result
Out[83]:
id
3   -1 days +23:05:18.348000
4            17:38:06.496000
dtype: timedelta64[ns]

संबंधित सवाल
सबसे लोकप्रिय