Skip to main content
 首页 » 编程设计

python之多个 Pandas 列

2025年05月04日14zlslch

如果 pandas 数据框有 4 列,如下所示:

      A     B     C     D      
 
0     2     4     1     9      
1     3     2     9     7       
2     1     6     9     2      
3     8     6     5     4        

是否有可能以某种方式应用 df.cumsum() 以在现有列旁边的新列中获取结果,如下所示:

      A     AA    B     BB     C     CC     D     DD 
 
0     2     2     4     4      1     1      9     9 
1     3     5     2     6      9     10     7     16  
2     1     6     6     12     9     19     2     18 
3     8     14    6     18     5     24     4     22   

请您参考如下方法:

您可以使用 assign 创建新列:

result = df.assign(**{col*2:df[col].cumsum() for col in df}) 

并使用 sort_index 对列进行排序:

result.sort_index(axis=1) 
#    A  AA  B  BB  C  CC  D  DD 
# 0  2   2  4   4  1   1  9   9 
# 1  3   5  2   6  9  10  7  16 
# 2  1   6  6  12  9  19  2  18 
# 3  8  14  6  18  5  24  4  22 

请注意,根据列名,排序可能不会产生所需的顺序。在这种情况下,使用 reindex是确保您获得所需列顺序的更可靠方法:

result = df.assign(**{col*2:df[col].cumsum() for col in df}) 
result = result.reindex(columns=[item for col in df for item in (col, col*2)]) 

这是一个演示差异的示例:

import pandas as pd 
df = pd.DataFrame({'A': [2, 3, 1, 8], 'A A': [4, 2, 6, 6], 'C': [1, 9, 9, 5], 'D': [9, 7, 2, 4]}) 
 
result = df.assign(**{col*2:df[col].cumsum() for col in df}) 
print(result.sort_index(axis=1)) 
#    A  A A  A AA A  AA  C  CC  D  DD 
# 0  2    4       4   2  1   1  9   9 
# 1  3    2       6   5  9  10  7  16 
# 2  1    6      12   6  9  19  2  18 
# 3  8    6      18  14  5  24  4  22 
 
result = result.reindex(columns=[item for col in df for item in (col, col*2)]) 
print(result) 
#    A  AA  A A  A AA A  C  CC  D  DD 
# 0  2   2    4       4  1   1  9   9 
# 1  3   5    2       6  9  10  7  16 
# 2  1   6    6      12  9  19  2  18 
# 3  8  14    6      18  5  24  4  22