Умножьте значения в DataFrame, если определенный элемент распознан - PullRequest
0 голосов
/ 01 марта 2019

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

A B C  D   E  F  G
1 0 -1 2  -4  C  5
4 1  5 7 -0.2 E  7

Всякий раз, когда столбец F содержит букву, он должен умножить строку, используя следующий номер, за исключением последнего столбца: C = 2,8 E = 1,4

Таким образом, конечный вывод будет выглядеть примерно так:

A   B   C    D     E    F  G
2.8 0  -2.8 5.6  -11.2  C  5
5.6 1.4  7  9.8  -0.28  E  7 

Вот код, который я пытаюсь использовать:

import pandas as pd
import csv  

data= pd.read_csv("file.txt", sep= '\t')        
U= data.drop('xyz', axis= 1)

for col in U:
    U=col * 2.63

for Z in U:
    Z= pd.DataFrame(U)

with open('File.tbl', 'r') as  f:       
    P=list(f)
    del P[0]

B=[]
O=[]
for o in P:
    J=o.split()
    B.append(J[:4])
    T=(J[3:4])
    O.append(J[2:3])

column=['A','B','C','D']
Y= pd.DataFrame(B, columns= column)
D= Y.drop(0)
D=D.reset_index(drop=True)
M = pd.concat([Z, D], sort=False, axis= 1)    #Concatenating both the dataframes
S= pd.DataFrame(M)  

x=O
while True:
    x= C = 2.8
    x= E = 1.4

    col_Number = col + '_Number'
    Z[col_Number] = (Z[col]*(x) - Z.max()) / Z.max() - Z.min() #multiply the Z-score rows

При запуске этой программы он показываетНет и только последний столбец т.е.E. Приведенная выше формула выбирает максимум и минимум из каждого столбца и выполняет расчет.Z [col] - значение строки, т.е.1, 0, -1 и т. Д., Которые должны быть умножены.

Я пытался использовать метод loc, но это не помогло.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

После небольшого исследования.

df.loc[df['F'] == 'C', ['A', 'B']] = df[['A', 'B']].apply(lambda x: x*2.8)

В общих чертах df.loc[condition,[list of columns]] = df [[list of columns]].apply()

аналогично вы можете использовать разные коэффициенты умножения в разных выражениях для разных столбцов.

0 голосов
/ 01 марта 2019

Вы можете создать словарь ключей столбца F и соответствующие значения для умножения.Выполните итерацию по словарю, чтобы выбрать нужные строки, применить умножение и переназначить.

df = pd.DataFrame({'A': [1, 4],
                   'B': [0, 1],
                   'C': [-1, 5],
                   'D': [2, 7],
                   'E': [-4.0, -0.2],
                   'F': ['C', 'E'],
                   'G': [5, 7]})

mapping = dict(C=2.8, E=1.4)

for k in mapping:
    ix = df.eval(f'F=="{k}"')
    df.loc[ix, list('ABCDE')] = df.loc[ix, list('ABCDE')] * mapping.get(k)

df 
# returns:
     A    B    C    D      E  F  G
0  2.8  0.0 -2.8  5.6 -11.20  C  5
1  5.6  1.4  7.0  9.8  -0.28  E  7
...