按行分析数据帧

2024-04-20 13:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它有5列,分别命名为“0”、“1”、“2”、“3”、“4”

small_pd
Out[53]: 
          0     1     2     3     4 
0      93.0  94.0  93.0  33.0   0.0  
1      92.0  94.0  92.0  33.0   0.0 
2      92.0  93.0  92.0  33.0   0.0  
3      92.0  94.0  20.0  33.0  76.0 

我想使用上面的行输入来提供一个函数,该函数执行以下操作。我举第一排和第二排的例子

第一行:

takeValue[0,0]-takeValue[0,1]+takeValue[0,2]-takeValue[0,3]+takeValue[0,4]

第二行:

   takeValue[1,0]-takeValue[1,1]+takeValue[1,2]-takeValue[1,3]+takeValue[1,4]

然后将所有这些结果指定为一个额外的列。你知道吗

small_pd['extracolumn']

有没有一种方法可以避免python中典型的for循环,并以更好的方式实现它?你知道吗

你能给我一些建议吗? 谢谢 亚历克斯


Tags: 数据方法函数for方式out命名建议
2条回答

你可以使用pd.apply

df = pd.DataFrame(data={"0":[93,92,92,92],
                   "1":[94,94,93,94],
                   "2":[93,92,92,20],
                   "3":[33,33,33,33],
                   "4":[0,0,0,76]})

def calculation(row):
    return row["0"]-row["1"]+row["2"]-row["3"]+row["4"]


df['extracolumn'] = df.apply(calculation,axis=1)
print(df)
    0   1   2   3   4  result
0  93  94  93  33   0      59
1  92  94  92  33   0      57
2  92  93  92  33   0      58
3  92  94  20  33  76      61

不要使用apply,因为引擎盖下的循环太慢了。你知道吗

通过^{}索引获得成对列和取消成对列,求和然后减去矢量化列,所以快速解决方案:

small_pd['extracolumn'] = small_pd.iloc[:, ::2].sum(1) - small_pd.iloc[:, 1::2].sum(1)
print (small_pd)
      0     1     2     3     4  extracolumn
0  93.0  94.0  93.0  33.0   0.0         59.0
1  92.0  94.0  92.0  33.0   0.0         57.0
2  92.0  93.0  92.0  33.0   0.0         58.0
3  92.0  94.0  20.0  33.0  76.0         61.0

验证:

a = small_pd.iloc[0,0]-small_pd.iloc[0,1]+small_pd.iloc[0,2]-
    small_pd.iloc[0,3]+small_pd.iloc[0,4]
b = small_pd.iloc[1,0]-small_pd.iloc[1,1]+small_pd.iloc[1,2]-
    small_pd.iloc[1,3]+small_pd.iloc[1,4]
print (a, b)
59.0 57.0

相关问题 更多 >