熊猫根据模式计算差异

2024-03-29 15:27:17 发布

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

我有一个熊猫数据帧作为

 df
  Category NET    A    B  C_DIFF    1    2  DD_DIFF .....
0      tom  CD   10   20     NaN   30   40     NaN
1      tom  CD  100  200     NaN  300  400     NaN
2      tom  CD  100  200     NaN  300  400     NaN
3      tom  CD  100  200     NaN  300  400     NaN
4      tom  CD  100  200     NaN  300  400     NaN

现在,我的列名以\u DIFF结尾,即C\u DIFF和DD\u DIFF应该得到后面的差异。i、 e,A-B值应以CèDIFF为单位,1-2的差值应以DDèDIFF为单位。如何获得所需的输出

编辑:有20列以\u DIFF结尾。需要以编程方式执行此操作,而不是硬编码列


Tags: 数据编辑dfnet编程结尾cddiff
1条回答
网友
1楼 · 发布于 2024-03-29 15:27:17

概括如下:

m=df.columns.get_indexer(df.filter(like='DIFF').columns)
df.iloc[:,m]=pd.concat([df.iloc[:,a]-df.iloc[:,b] for a,b in zip(m-2,m-1)],axis=1).values
print(df)

  Category NET    A    B  C_DIFF    1    2  DD_DIFF
0      tom  CD   10   20     -10   30   40      -10
1      tom  CD  100  200    -100  300  400     -100
2      tom  CD  100  200    -100  300  400     -100
3      tom  CD  100  200    -100  300  400     -100
4      tom  CD  100  200    -100  300  400     -100

说明:

^{}将筛选名为DIFF的列

df.columns.get_indexer使用^{}获取这些列的索引

我们把它们压缩并计算它们之间的差异,然后将它们存储在一个列表中并进行合并。最后访问要分配的值

编辑: 要处理字符串,可以借助^{}errors='coerce'来处理:

m=df.columns.get_indexer(df.filter(like='DIFF').columns)
df.iloc[:,m]=pd.concat([pd.to_numeric(df.iloc[:,a],errors='coerce')-
 pd.to_numeric(df.iloc[:,b],errors='coerce') for a,b in zip(m-2,m-1)],axis=1).values

相关问题 更多 >