Как получить первые n значений из массива в кадре данных,
где n - длина этого же массива - 1: (len [массив] - 1)?
Чтобы пояснить, к чему я стремлюсь, приведу код, который у меня есть, из моего блокнота jupyter:
import numpy as np
import pandas as pd
#load csv into pandas data frame
df1 = pd.read_csv(r"accounts.csv")
#define the range for clarity
xi = 60
xn = 70
df1['splt_acc'] = df1.Account.str.split('.')
df1['len'] = df1.splt_acc.apply(lambda x: len(x)-1).astype(int)
df1['parent'] = df1.splt_acc.str.join('.')
pd.DataFrame(df1)[xi:xn]
показывает следующее
Account Rubriek splt_acc len parent
60 9.5 Inkoop [9, 5] 1 9.5
61 9.6 Overige res.. [9, 6] 1 9.6
62 9.7 Buitengewon.. [9, 7] 1 9.7
63 9.8 Incidentele.. [9, 8] 1 9.8
64 9.9 Vennootschap. [9, 9] 1 9.9
65 0.0.0 Terreinen [0, 0, 0] 2 0.0.0
66 0.0.1 Gebouwen [0, 0, 1] 2 0.0.1
67 0.0.2 Verbouwingen [0, 0, 2] 2 0.0.2
68 0.0.3 Machines [0, 0, 3] 2 0.0.3
69 0.0.4 Gereedschappen[0, 0, 4] 2 0.0.4
и следующее, что я хочу, это:
df1['y'] = df1.splt_acc.apply(lambda splt_acc: splt_acc[0:df1.len])
pd.DataFrame(df1)[xi:xn]
Это приводит к следующей ошибке: индексы срезов должны быть целыми числами или отсутствовать или иметь index метод
С помощью более простого метода я могу получить результат в строке, в данном случае в строке 60:
account = df1['Account'][60]
x = account.split('.')
if len(x) - 1 == 0:
y = 'null'
else:
y = x[0:(len(x)-1)]
print(y)
[ '9'] * * один тысяча двадцать-одна
if y == 'null':
parent = 'null'
else:
parent = ".".join(str(x) for x in y)
print(parent)
9
Но вопрос в том, как я могу получить тот же результат в моем DataFrame?