मेरे पास एक डेटा स्रोत है जो मुझे निम्नलिखित संरचना का डेटा प्रदान करता है:

| timestamp                | tagid       | value        |
|--------------------------|-------------|--------------|
| 01.01.2018 00:00:00:01   | 1           | 100.0        |
| 01.01.2018 00:00:00:01   | 1           | 101.0        |
| 01.01.2018 00:00:00:01   | 2           | 99.0         |
| 01.01.2018 00:00:00:02   | 2           | 120.0        |
| 01.01.2018 00:00:00:02   | 3           | 150.0        |
| 01.01.2018 00:00:00:02   | 3           | 12.0         |

मैं चाहता हूं कि यह निम्नलिखित की तरह दिखे

| 1       | 2       | 3       | As you can see, I get two rows, because I 
|---------|---------|---------| have two instances of every TAGID
|  100.0  |  99.0   |  150.0  |
|  101.0  |  120.0  |  12.0   |

इसका मतलब है कि मुझे पिवट टेबल का उपयोग करना है। इसके लिए मेरा कोड है:

pivot = df.pivot_table(index=['timestamp'], columns=['tagid'], values='value')

यह काम करता है, एक हद तक। नया डेटास्ट्रक्चर ठीक वैसा ही है जैसा मैं चाहता हूं। समस्या यह है कि मुझे पंक्तियां याद आ रही हैं जो वहां होनी चाहिए। मैंने पहले ही झंडे "fill_value" और "dropna" की कोशिश की है, लेकिन कोई प्रभाव नहीं पड़ा।

यह मेरी विचार प्रक्रिया है:

मेरे (असली) डेटासेट में ९३६० पंक्तियाँ हैं और मेरे पास १४४ अलग टैग हैं। यानी 144 अलग-अलग टैग्स को 9360/144 = 65 बार रिपीट करना होगा। मैंने इसे मैन्युअल रूप से सत्यापित किया है।

वैसे भी, किसी कारण से मैं नहीं देख सकता कि मुझे ६५ से कम पंक्तियाँ मिलती हैं, अर्थात् ३५। जहाँ तक मैं बता सकता हूँ, डेटा काम करने के लिए पर्याप्त साफ है।

मुझे लगता है कि मैं यहां एक महत्वपूर्ण विवरण खो रहा हूं, कृपया उस विवरण को खोजने में मेरी सहायता करें।

1
Necrophades 22 अक्टूबर 2018, 16:43

1 उत्तर

सबसे बढ़िया उत्तर

crosstab से एक तरह से, index का उपयोग करके cumcount बनाएं जो आपके प्रश्न की कुंजी है (PS: , pivot , pivot_table , stack unstack कुंजी बनाने के बाद भी काम करता है)

pd.crosstab(df.groupby('tagid').cumcount(),df.tagid,df.value,aggfunc='mean')
Out[947]: 
tagid      1      2      3
row_0                     
0      100.0   99.0  150.0
1      101.0  120.0   12.0
1
BENY 22 अक्टूबर 2018, 13:47