0
ich einen Datenrahmen aus der folgenden Wörterbuch an Konstruktion:Datenrahmen gelten mit vektorisiert Funktion verhalten weirdly
diction = {"a":{"aa":0, "bb":2, "cc":3}, "b":{"aa":4, "bb":5, "cc":6}, "c":{"aa":7, "bb":8, "cc":9}}
df = pandas.DataFrame(diction)
Ich versuche dann einige Operationen auf dem Datenrahmen auszuführen, indem Sie die folgenden Funktionen:
import pandas
import numpy as np
import math
def applyGivenTotals(rowOrColumn, rowOrColumnTotals, rowOrColumnName):
return rowOrColumn/float(rowOrColumnTotals[rowOrColumnName])
def piLogpi(value):
if(value==0):
return 0
else:
return -value * math.log10(value)
def someFunction(df):
entropy = {}
rowTotals = df.sum(axis=1)
rowApplied = df.apply(lambda row:applyGivenTotals(row, rowTotals, row.name), axis=1)
unSummedPis = rowApplied.apply(np.vectorize(piLogpi))
return unSummedPis
Ich bekomme Nullen in der linken Spalte, aber ich verstehe nicht warum.
Um zu klären, mein erwartetes Ergebnis ist:
a b c
aa 0 0.159757 0.124915
bb 0.116675 0.159040 0.145601
cc 0.129692 0.159040 0.150515
Aber ich bin immer:
a b c
aa 0 0.159757 0.124915
bb 0 0.159040 0.145601
cc 0 0.159040 0.150515
Danke, sieht aus wie Ich habe apply und applymap synonym verwendet, obwohl apply für Serienobjekte verwendet werden soll zur Dokumentation: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html. –
@Aurgho Bhattacharjee - Ja, genau. – jezrael