Python 使用panda中的interrows()在两列中执行不完整的数学运算
嗨,我正在尝试减去数据帧的2列数据,并将其放入新的数据帧中。我正在interrows()中使用for循环。但是,由于行的大小小于列,循环并没有完成所有计算。该列将在将来增加,因此我使用循环而不是列名。 是否有其他方法执行此计算Python 使用panda中的interrows()在两列中执行不完整的数学运算,python,pandas,for-loop,subtraction,Python,Pandas,For Loop,Subtraction,嗨,我正在尝试减去数据帧的2列数据,并将其放入新的数据帧中。我正在interrows()中使用for循环。但是,由于行的大小小于列,循环并没有完成所有计算。该列将在将来增加,因此我使用循环而不是列名。 是否有其他方法执行此计算 name col1 col2 col3 col4 col5 col6 col7 col8 John 0 23 0 1 4 1 5 23 1
name col1 col2 col3 col4 col5 col6 col7 col8
John 0 23 0 1 4 1 5 23
1 victor 1 4 5 2 1 4 2 15
2 Alida 1 1 2 6 0 2 14 2
3 Natalie 0 1 1 4 2 3 4 4
4 Morman 3 3 1 0 5 2 0 1
我尝试运行以下代码:
for label, row in df.iterrows():
df2.iloc[:,[label+2]]=df.iloc[:,[label+2]].values-df.iloc[:,[label+1]].values
但是,循环不会在col6之后运行。我猜这是因为行的数量少于列。
结果:
是否仍要运行循环,直到循环遍历所有列?您可以对数据帧使用
diff
方法从相邻列中减去每列。例如:
df.set_index('name').diff(axis=1)
这将您的名称列设置为行索引,然后从下一列中减去每一列。正如您所提到的,输出中将少一列,因此结果col1将是NaNs。您可以对数据帧使用
diff
方法从相邻列中减去每列。例如:
df.set_index('name').diff(axis=1)
这将您的名称列设置为行索引,然后从下一列中减去每一列。正如您所提到的,输出中将少一列,因此结果col1将是NaNs。如果要减去两个特定的列,请使用以下方法:
import numpy as np
import pandas as pd
data = {"name":["john","victor","alida","natalie","morman"],"col1":[0,1,2,3,4],"col2":[5,6,7,8,9],"col3":[0,1,2,3,4],"col4":[5,6,7,8,9],"col5":[0,1,2,3,4],"col6":[5,6,7,8,9],"col7":[0,1,2,3,4]}
df = pd.DataFrame(data=data)
print(df)
new_df = pd.DataFrame()
new_df["new_col"] = df["col1"] - df["col2"]
print(new_df)
cols = df.columns
for i in range(2,len(cols)-1):
new_df["new_" + cols[i]] = df[cols[i]]-df[cols[i-1]]
print(new_df)
例如,如果要从相邻列中减去每一列,请使用以下命令:
import numpy as np
import pandas as pd
data = {"name":["john","victor","alida","natalie","morman"],"col1":[0,1,2,3,4],"col2":[5,6,7,8,9],"col3":[0,1,2,3,4],"col4":[5,6,7,8,9],"col5":[0,1,2,3,4],"col6":[5,6,7,8,9],"col7":[0,1,2,3,4]}
df = pd.DataFrame(data=data)
print(df)
new_df = pd.DataFrame()
new_df["new_col"] = df["col1"] - df["col2"]
print(new_df)
cols = df.columns
for i in range(2,len(cols)-1):
new_df["new_" + cols[i]] = df[cols[i]]-df[cols[i-1]]
print(new_df)
如果要减去两个specefic列,请使用col1和col2:
import numpy as np
import pandas as pd
data = {"name":["john","victor","alida","natalie","morman"],"col1":[0,1,2,3,4],"col2":[5,6,7,8,9],"col3":[0,1,2,3,4],"col4":[5,6,7,8,9],"col5":[0,1,2,3,4],"col6":[5,6,7,8,9],"col7":[0,1,2,3,4]}
df = pd.DataFrame(data=data)
print(df)
new_df = pd.DataFrame()
new_df["new_col"] = df["col1"] - df["col2"]
print(new_df)
cols = df.columns
for i in range(2,len(cols)-1):
new_df["new_" + cols[i]] = df[cols[i]]-df[cols[i-1]]
print(new_df)
例如,如果要从相邻列中减去每一列,请使用以下命令:
import numpy as np
import pandas as pd
data = {"name":["john","victor","alida","natalie","morman"],"col1":[0,1,2,3,4],"col2":[5,6,7,8,9],"col3":[0,1,2,3,4],"col4":[5,6,7,8,9],"col5":[0,1,2,3,4],"col6":[5,6,7,8,9],"col7":[0,1,2,3,4]}
df = pd.DataFrame(data=data)
print(df)
new_df = pd.DataFrame()
new_df["new_col"] = df["col1"] - df["col2"]
print(new_df)
cols = df.columns
for i in range(2,len(cols)-1):
new_df["new_" + cols[i]] = df[cols[i]]-df[cols[i-1]]
print(new_df)
你能解释一下你希望看到的输出是什么吗?此外,当您使用
iterrows
进行迭代时,label将是行索引,但您将其用作iloc的列索引。而且,iterrows
的速度非常慢,因此如果您对尝试执行的操作进行更多解释,我们可能会找到更好的函数供您使用。虽然我不确定您想要得到什么,但听起来您可能希望使用diff
方法,并且可能需要事先转置数据帧。我想查看for col7=col7和col6的差异。是否有任何其他函数将在dataframe的所有值中运行计算。我尝试在col中使用标签,但它不起作用@Teepees现在有意义了;下面是我的答案。你能解释一下你希望看到的输出吗?此外,当您使用iterrows
进行迭代时,label将是行索引,但您将其用作iloc的列索引。而且,iterrows
的速度非常慢,因此如果您对尝试执行的操作进行更多解释,我们可能会找到更好的函数供您使用。虽然我不确定您想要得到什么,但听起来您可能希望使用diff
方法,并且可能需要事先转置数据帧。我想查看for col7=col7和col6的差异。是否有任何其他函数将在dataframe的所有值中运行计算。我尝试在col中使用标签,但它不起作用@Teepees现在有意义了;下面是我的答案。数据框列将在未来增加。我想它在我发帖的时候被删除了,所以我想用索引值代替列名;有一个名为diff
的内置方法可以做到这一点。数据帧列将在将来增加。我想它在我发帖的时候被删除了,所以我想用索引值代替列名;有一个名为diff
的内置方法可以做到这一点。嗨,这是可以解决的。但是,如果我必须从两个不同的数据帧列中减去值,其中row不确定您所说的where row