我有一个熊猫数据框
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
现在我的列名以_DIFF结尾,即C_DIFF和DD_DIFF应该得到后续的区别。即A-B值应在C_DIFF中,而1-2的差应填充在DD_DIFF中。如何获得所需的输出。
编辑:有20列以_DIFF结尾。需要以编程方式执行此操作,而不是对列进行硬编码
最佳答案
概括如下:
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
说明:
df.filter()
将过滤名称为DIFF
的列。df.columns.get_indexer
使用pd.Index.get_indexer
来获取此类列的索引。发布后,我们将它们压缩并计算差异,然后存储在列表中并合并它们。最后访问要分配的值。
编辑:
要处理字符串,可以在
pd.to_numeric()
的帮助下使用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
关于python - Pandas 根据模式计算差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56886589/