我有一個資料框如下:
| A-開 | A-關閉 | 總計 | G-open | G-關閉 | G-總計 | F開 | F-關閉 | F-總 |
|---|---|---|---|---|---|---|---|---|
| 1 | 4 | 0 | 3 | 5 | 0 | 8 | 2 | 0 |
我想總結每個標題的所有打開和關閉,我想要的表是:
| A-開 | A-關閉 | 總計 | G-open | G-關閉 | G-總計 | F開 | F-關閉 | F-總 |
|---|---|---|---|---|---|---|---|---|
| 1 | 4 | 5 | 3 | 5 | 8 | 8 | 2 | 10 |
uj5u.com熱心網友回復:
您可以在破折號之前提取 id 并將其用于groupby sum列:
groups = df.columns.str.split('-').str[0]
d = df.groupby(groups, axis=1).sum().add_suffix('-total')
輸出:
A-total F-total G-total
0 5 10 8
插入/替換為列:
df[d.columns] = d
輸出:
A-open A-close A-total G-open G-close G-total F-open F-close F-total
0 1 4 5 3 5 8 8 2 10
注意。這是假設“X-total”列最初不存在或為空。如果不為空:
df[d.columns] = d-df[d.columns]
uj5u.com熱心網友回復:
我們可以將str.rsplit列轉換為 MultiIndex ,swaplevel以便頂級列是“打開”、“關閉”和“總計”。MultiIndex 的好處是我們可以使用索引對齊來進行計算,并且計算可以按慣用方式完成:
# Create MultiIndex
df.columns = df.columns.str.rsplit('-', n=1, expand=True).swaplevel()
# Multi Index allows for idiomatic computations like this:
df['total'] = df['open'] df['close']
# Collapse MultiIndex
df.columns = [f'{b}-{a}' for (a, b) in df.columns]
df:
A-open A-close A-total G-open G-close G-total F-open F-close F-total
0 1 4 5 3 5 8 8 2 10
設定:
import pandas as pd
df = pd.DataFrame({
'A-open': [1], 'A-close': [4], 'A-total': [0], 'G-open': [3],
'G-close': [5], 'G-total': [0], 'F-open': [8], 'F-close': [2],
'F-total': [0]
})
uj5u.com熱心網友回復:
通過將所有列名按“-”拆分并保留第一個字母/字母,將輸出放入一組以洗掉重復項,獲取不同字母列集的串列:
letters = list({i.split('-')[0] for i in df.columns.to_list()})
print(letters)
{'A', 'F', 'G'}
然后你可以回圈遍歷這些,并通過添加打開和關閉來計算每個的總列:
for l in letters:
df[l '-total'] = df[l '-open'] df[l '-close']
最終 df:
A-open A-close A-total G-open G-close G-total F-open F-close F-total
0 1 4 5 3 5 8 8 2 10
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370803.html
