如果识别出特定元素,则乘以 DataFrame 中的值
Multiply values in a DataFrame if certain element is recognized
我正在尝试制作一个程序,如果在其中识别出某个元素,该程序将乘以 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
在 运行 这个程序中,它显示 None 并且只显示最后一列,即。 E. 上述公式从每一列中选取最大值和最小值进行计算。 Z[col] 是行值,即。要相乘的 1、0、-1 等。
我试过使用 loc 方法,但没有用。任何帮助将不胜感激。
您可以创建一个包含列 F
的键和要相乘的相应值的字典。遍历字典以 select 您需要的行,应用乘法并重新分配。
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
经过一些研究。
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()
同样,您可以在不同列的不同语句中使用不同的乘数。
我正在尝试制作一个程序,如果在其中识别出某个元素,该程序将乘以 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
在 运行 这个程序中,它显示 None 并且只显示最后一列,即。 E. 上述公式从每一列中选取最大值和最小值进行计算。 Z[col] 是行值,即。要相乘的 1、0、-1 等。
我试过使用 loc 方法,但没有用。任何帮助将不胜感激。
您可以创建一个包含列 F
的键和要相乘的相应值的字典。遍历字典以 select 您需要的行,应用乘法并重新分配。
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
经过一些研究。
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()
同样,您可以在不同列的不同语句中使用不同的乘数。