применить функцию к панам данных - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу применить свою функцию к фрейму данных, но это не должно повлиять на первую строку. Потому что это моя сумма. Когда я применяю функцию к датафрейму, она разделяет и первую строку. Я пытаюсь разделить каждое значение на значение первой строки.

Как мне это сделать? А также я хочу показать результаты с двумя десятичными знаками, например, 40,00, а не * 40,0.

Здесь моя функция и фрейм данных

  df1 = pd.DataFrame(np.array([[200,200],[40,40],[80,80],[80,80]]), columns= 
  ["Erkek","Kadin"], index=["Base","AB","C1","C2"])


  def yuzde(x):
     x = x/x[0]
     x = x*100
     return round(x,2)

  tablo = df1.apply(yuzde, axis=0)

  print(tablo)

мой вывод:

         Erkek  Kadin
   Base  100.0  100.0
   AB     20.0   20.0
   C1     40.0   40.0
   C2     40.0   40.0

но я хочу это как;

         Erkek    Kadin
   Base   200     200
   AB     20.00   20.00
   C1     40.00   40.00
   C2     40.00   40.00

Спасибо,

1 Ответ

0 голосов
/ 26 апреля 2018

Я предлагаю не использовать apply, потому что медленнее, лучше использовать векторизованный солютон с div и iloc:

df1.iloc[1:] = df1.iloc[1:].div(df1.iloc[0]).mul(100)
print (df1)
      Erkek  Kadin
Base  200.0  200.0
AB     20.0   20.0
C1     40.0   40.0
C2     40.0   40.0

Еслинужно изменить формат, если это возможно, но получить string s добавить applymap:

df1.iloc[1:] = df1.iloc[1:].div(df1.iloc[0]).mul(100).applymap('{:,.2f}'.format)
print (df1)
      Erkek  Kadin
Base    200    200
AB    20.00  20.00
C1    40.00  40.00
C2    40.00  40.00

print (df1.applymap(type))
              Erkek          Kadin
Base  <class 'int'>  <class 'int'>
AB    <class 'str'>  <class 'str'>
C1    <class 'str'>  <class 'str'>
C2    <class 'str'>  <class 'str'>

df1.iloc[1:] = df1.iloc[1:].div(df1.iloc[0]).mul(100).applymap('{:,.2f}'.format)
df1 = df1.astype(str)
print (df1)
      Erkek  Kadin
Base    200    200
AB    20.00  20.00
C1    40.00  40.00
C2    40.00  40.00

print (df1.applymap(type))
              Erkek          Kadin
Base  <class 'str'>  <class 'str'>
AB    <class 'str'>  <class 'str'>
C1    <class 'str'>  <class 'str'>
C2    <class 'str'>  <class 'str'>
...