przenumerowanie po serii str jak po levelach enuma

0

chcę coś takiego:

x = pd.Series(["a", "b", "c", "a", "b", "a"])

for idx in level(x):
    print (idx)

rezultat:

1

2

3

1

2

1

0

Zmapuj sobie literę na cyfrę i ju ;p

0

Da się prościej?

x = pd.Series(["a", "b", "c", "a", "b", "a"])

x_mapped = x.apply(lambda i: [i for i, k in enumerate(x.unique()== i) if k][0])

for i in x_mapped:
    print(i)

w R bym to zrobił tak:

x <- c("a", "b", "c", "a", "b", "a")
lapply(level(factor(x)), cat)
0

całość problemu:

# Show correlation between sepal_lenth and petal_width with size of sepal_width by classon plot
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm

def load_iris():
    iris = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")
    iris.columns = ["sepal_length", "sepal_width", "petal_length", "petal_width", "classs"]
    return iris

def _map_factor_level(x):
    return x.apply(lambda i: [i for i, k in enumerate(x.unique()== i) if k][0])

def plot_iris_correlations(iris):
    fig, ax = plt.subplots()

    colormap = cm.Accent
    colorlist = [colormap(i) for i in _map_factor_level(iris.classs)]

    ax.scatter(iris.sepal_length, iris.petal_length, s=iris.sepal_width*10, c=colorlist)

    plt.show()
    
def main():
    iris = load_iris()
    plot_iris_correlations(iris)
    
main()
0

print [ord(x) - 96 for char in raw_input('Write Text: ').lower()] - coś takiego też powinno pyknąć.

1
Julian_ napisał(a):

Da się prościej?

Da się. Spróbuj tak:

x.map({v:i+1 for i,v in enumerate(x[~x.duplicated()].values)})
1

Jest jeszcze krótsza metoda:

num, _ = pd.factorize(x)

for n in num:
    print(n)

1 użytkowników online, w tym zalogowanych: 0, gości: 1