0 Daumen
250 Aufrufe

Ich habe einen Abstimmungsdataframe und ich möchte ein Praferenzdataframe. Zum Beispiel ist hier die Anzahl der Stimmen für jede Partei P1, P2, P3 in jeder Stadt comm1, comm2, comm3 ...

    Comm    Votes  P1      P2      P3
0  comm1  1315.0  2.0    424.0  572.0
1  comm2  4682.0  117.0  2053.0  1584.0
2  comm3  2397.0  2.0    40.0    192.0
3  comm4  931.0  2.0    12.0    345.0
4  comm5  842.0  47.0    209.0  76.0
... ... ... ... ... ...
1524    comm1525    10477.0 13.0    673.0  333.0
1525    comm1526    2674.0  1.0 55.0    194.0
1526    comm1527    1691.0  331.0  29.0    78.0

Und für jede politische Partei möchte ich Präferenzen aus Zufallszahlen erstellen. Ich die voters honest. Ich schätze, die Wähler sind ehrlich. Zum Beispiel, für politische Partei P1 in comm1 2 stimmen die Leute für sie und es gibt 1315 Wähler. Ich muss Präferenzen schaffenm um zu wissen, ob die Menschen es als ihre erste, zweite oder dritte Wahl betrachen würden.

Das heißt, und zwar für jedes Partei:

    Comm    Votes  P1_1        P1_2    P1_3    P2_1    P2_2    P2_3    P3_1        P...
0    comm1  1315.0  2.0        1011.0  303.0  424.0  881.0  10.0    572.0
... ... ... ... ... ...
1526 comm1527  1691.0  331.0  1300.0  60.0    299.0  22.0    10.0    ...
Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Umsetzung in Python mit pandas

Um ein Präferenz-DataFrame aus dem gegebenen Abstimmungs-DataFrame zu erstellen, müssen wir einige Schritte durchführen. Die Grundidee ist es, für jede Partei in jedem Kommunalbereich (comm) und für jede Stimme zu entscheiden, ob diese Stimme als erste, zweite oder dritte Wahl (usw., abhängig von der Anzahl der Parteien) betrachtet wird. Da die Wähler als ehrlich angenommen werden, bedeutet dies, dass die Verteilung der Präferenzen auf Basis der vorhandenen Stimmenanzahl für jede Partei erfolgt. Wir müssen jedoch auch berücksichtigen, dass die Summe der Präferenzen aller Stufen innerhalb einer Partei mit der Gesamtanzahl der Stimmen für diese Partei übereinstimmen muss.

Zunächst müssen wir Pandas und Numpy importieren, um mit dem DataFrame arbeiten zu können. Dann erstellen wir eine Funktion, die den ursprünglichen DataFrame nimmt und den erweiterten Präferenz-DataFrame gemäß der Aufgabenstellung generiert. Wir verwenden Zufallszahlen, um die Präferenzen zu verteilen, stellen aber sicher, dass die Gesamtsumme der Stimmen für jede Partei erhalten bleibt.

python
import pandas as pd
import numpy as np

# Beispiel-Daten
data = {
    'Comm': ['comm1', 'comm2', 'comm3', 'comm4', 'comm5', 'comm1525', 'comm1526', 'comm1527'],
    'Votes': [1315.0, 4682.0, 2397.0, 931.0, 842.0, 10477.0, 2674.0, 1691.0],
    'P1': [2.0, 117.0, 2.0, 2.0, 47.0, 13.0, 1.0, 331.0],
    'P2': [424.0, 2053.0, 40.0, 12.0, 209.0, 673.0, 55.0, 29.0],
    'P3': [572.0, 1584.0, 192.0, 345.0, 76.0, 333.0, 194.0, 78.0]
}

df = pd.DataFrame(data)

def erstelle_praeferenz_df(df):
    praeferenz_cols = [f'{partei}_{praef}' for partei in ['P1', 'P2', 'P3'] for praef in ['1', '2', '3']]
    praeferenz_df = pd.DataFrame(columns=['Comm', 'Votes'] + praeferenz_cols)
    
    for i, row in df.iterrows():
        comm = row['Comm']
        votes = row['Votes']
        tmp_data = [comm, votes]
        
        for partei in ['P1', 'P2', 'P3']:
            stimmen = row[partei]
            # Die Zufallsverteilung der Präferenzen für jede Partei
            praeferenzen = np.random.multinomial(stimmen, [1/3]*3)
            tmp_data.extend(praeferenzen)
        
        praeferenz_df = praeferenz_df.append(pd.Series(tmp_data, index=praeferenz_df.columns), ignore_index=True)
    
    return praeferenz_df

praef_df = erstelle_praeferenz_df(df)
print(praef_df)


In diesem Code-Beispiel verwenden wir die np.random.multinomial Funktion, um die Stimmen auf die erste, zweite und dritte Präferenz zufällig, aber proportional zu verteilen. Beachte jedoch, dass dies auf der Annahme basiert, dass die Verteilung der Präferenzen gleichmäßig ist, was möglicherweise nicht immer der Realität entspricht. In realen Szenarien könnten zusätzliche Informationen oder Modelle erforderlich sein, um genauer zu bestimmen, wie die Präferenzen verteilt werden sollten.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community