Ich möchte bestimmte Zeilen in einen Datenrahmen einfügen. Der Datenrahmen enthält Spalten für ID, Stundenname und Anzahl. Ich möchte Zeilen in die Stunden (0-23) einfügen, die keine Daten enthalten. Dies ist mein Datenrahmen,

      index  id                          hourname  count
           0  a                               0         1
           1  a                               4         1
           2  a                               14        1
           3  a                               15        3
           4  a                               17        1
           5  a                               20        1

Und das möchte ich erreichen

      index  id                          hourname  count
           0  a                               0         1
           1  a                               1         0
           2  a                               2         0
           3  a                               3         0
           4  a                               4         1
           5  a                               5         0
           6  a                               6         0 
           7  a                               7         0
           8  a                               8         0
           9  a                               9         0
           10 a                               10        0
           11 a                               11        0
           12 a                               12        0
           13 a                               13        0
           14 a                               14        1
           15 a                               15        3
           16 a                               16        0
           17 a                               17        1
           18 a                               18        0
           19 a                               19        0
           20 a                               20        1
           21 a                               21        0
           22 a                               22        0
           23 a                               23        0

Ich greife nach Daten aus einer CSV-Datei, hier ist der Dateiinhalt (Name der Datei ist a.csv im Quellcode)

,id,hourname,count
0,a,0,1
1,a,4,1
2,a,14,1
3,a,15,3
4,a,17,1
5,a,20,1

Und hier ist mein Quellcode

import csv
import pandas as pd
import numpy as np

result4 = pd.read_csv("a.csv")
print(result4)
for i in range(0,23):
    if result4.loc[i, 'hourname'] != i:
        line = pd.DataFrame({"id": "a", "hourname": i, "count":0}, index=[i])
        result4 = result4.append(line, ignore_index=False)
    result4 = result4.sort_index().reset_index(drop=True)
print(result4)
1
wassup 19 Aug. 2020 im 10:17

2 Antworten

Beste Antwort

Ich hoffe das beantwortet deine Frage?

import pandas as pd
x = [0, 4, 14, 15, 17, 20]
y = [1, 1, 1, 3, 1, 1]
k = list(range(0,24))
i = list(set(k) - set(x))
for itm in i:
    x.insert(itm,itm)
    y.insert(itm, 0)
data = {'id': len(x) * ['a'], 'hourname': x, 'count': y}
df = pd.DataFrame(data) 
print(df)

Ich habe einfach eine Liste k erstellt, die Ganzzahlen von 0 bis 23 enthält, und dann habe ich den Unterschied zwischen list x und list k als list i erhalten. Danach habe ich list i durchlaufen und seine Elemente zu list x und Nullen an benachbarten Anzeigen in list y hinzugefügt.

0
Seyi Daniel 19 Aug. 2020 im 09:02

Versuchen,

hours_df = pd.DataFrame({'hourname': range(0,23)})
df = your_df.merge(hours_df, how='right', on='hourname')

Dies gibt Ihnen alle Stunden. Dann füllen Sie die fehlende ID und zählen

df['id'] = df['id'].ffill()
df['count'] = df['count'].fillna(0)
0
Rajesh C 19 Aug. 2020 im 08:51