मैं अभी भी अपने स्थानीय स्कूल के सभी जिम साइनअप के डेटा के साथ एक पांडा प्रोजेक्ट पर काम कर रहा हूं। मैं (x = df.index.values, y = मानों की गिनती) द्वारा एक बार ग्राफ प्रदर्शित करने का प्रयास कर रहा हूं, सूचकांक में एक सरणी होती है जो इस तरह दिखती है

Time
10:00AM     44
10:00PM     45
11:00AM     98
12:00PM     93
1:00PM      58
2:00PM      95
3:00PM     148
4:00PM     118
5:00PM     196
6:00AM      11
6:00PM     169
7:00AM       8
7:00PM     108
8:00AM      49
8:00PM     100
9:00AM      90
9:00PM      75
Name: Name, dtype: int64

यह डेटा सोमवार को साइन-अप की हर घटना का प्रतिनिधित्व करता है, अब मैं इसे ग्राफ़ करने की कोशिश कर रहा हूं और मैं बार प्लॉट पर एक्स मान के रूप में ["टाइम"] कॉलम का उपयोग करता हूं। जैसा कि मैंने उम्मीद की थी, ग्राफ मूल्यों को क्रमबद्ध नहीं करता है

"6:00AM","7:00AM", "8:00AM","9:00AM","10:00AM", "11:00AM", "12:00PM", "1:00PM","2:00PM", "3:00PM", "4:00PM", "5:00PM", "6:00PM", "7:00PM", "8:00PM", "9:00PM"

मैंने "एएम" या "पीएम" में समाप्त होने वाले मानों को खोजने के लिए रेगेक्स का उपयोग करने का प्रयास किया और उन्हें विपरीत सरणी में रखा, लेकिन इससे मुझे एक अंधेरे पथ पर ले जाया गया।

क्या किसी के पास इन मूल्यों को क्रमबद्ध करने का कोई सुझाव है? क्या मुझे उन्हें डेटाटाइम में बदलना चाहिए और फिर df.sort.values() लागू करना चाहिए?

यहां वह कोड है जिसने मुझे यह ग्राफ प्रदर्शित करने के लिए प्राप्त किया है:

import numpy as np
import pandas as pd
main_data = pd.read_csv('newoutput3.csv', delimiter=",", encoding='cp1252')
main_data['Date'] = pd.to_datetime(main_data['Date'])
main_data['dayOfWeek'] = main_data['Date'].dt.day_name() 
main_data_dayOfWeek = main_data.groupby('dayOfWeek')
Monday = main_data_dayOfWeek.get_group('Monday')
## HERE IS THE GROUPING BY TIME!!
MondayTimes = Monday.groupby('Time')
##Displays the dataframe that I posted at the top
test = MondayTimes['Name'].count()
plt.bar(test.index.values, test, align='center', alpha=0.5)
plt.xticks(rotation=90)
plt.show()

Graph Here

अंत में, यहाँ मेरे मूल डेटा का एक उदाहरण है!

enter image description here

मुझे आशा है कि मैंने यथासंभव अधिक जानकारी प्रदान की है, इसे पढ़ने के लिए धन्यवाद और उस परियोजना से अलग होने के लिए जिसे विकसित करने में मुझे बहुत मज़ा आ रहा है!

0
mlabenski 15 अक्टूबर 2020, 18:08

2 जवाब

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

सबसे पहले, 24 घंटे के प्रारूप में कनवर्ट करें और फिर इसे आरोही क्रम में लगाएं:

df =(
    df.assign(
        time = lambda x: pd.to_datetime(x['time']).dt.strftime('%H:%M:%S')
    ).sort_values('time')
)
2
Mehdi Golzadeh 15 अक्टूबर 2020, 18:41

संपादित करें: अभी भी एक कुंजी द्वारा छँटाई की विधि रखते हुए, हालांकि, इसे पहले सूची को विभाजित करने की आवश्यकता नहीं है, मूल रूप से घंटे को 24 घंटों के प्रारूप में परिवर्तित करके।

import random
times = ["12:00AM", "6:00AM","7:00AM", "8:00AM","9:00AM","10:00AM", "11:00AM", "12:00PM", "1:00PM","2:00PM", "3:00PM", "4:00PM", "5:00PM", "6:00PM", "7:00PM", "8:00PM", "9:00PM"]

random.shuffle(times)
print(times)

def srt(item):
    am_pm = 12 if (item.endswith("PM") and "12:00" not in item) else -12 if (item.endswith("AM") and "12:00" in item) else 0
    return int(item.split(":")[0])+am_pm # 9:00PM -> ['9', '00PM'] -> 9
times.sort(key=srt)

print(times)
0
Tyler Stoney 15 अक्टूबर 2020, 18:45