我有一张这样的桌子-
Cell Sales Lag
0 -8 1
1 -8 3 1
2 -8 2 3
3 -7 9
4 -7 3 9
我要插入一个总计行,该行将每个单元格组的“ Sales”列的最后一个值插入到“ Sales”列中,并为一个单元格组将“ Sales”列的第一个值插入将其插入滞后列。
结果应类似于-
Cell Sales Lag
0 -8 1
1 -8 3 1
2 -8 2 3
3 Total 2 1
4 -7 9
5 -7 3 9
6 Total 3 9
很抱歉,我无法提出任何逻辑来解决此问题。请客气。
答案 0 :(得分:0)
请记住,在dataframe
中插入行效率很低。这是我的处理方法:
import pandas as pd
from io import StringIO
ss = StringIO('''
Index Cell Sales Lag
0 -8 1
1 -8 3 1
2 -8 2 3
3 -7 9
4 -7 3 9
''')
df = pd.read_csv(ss, sep='\s+')
del df['Index']
# Store the firsts
df_first = df.groupby('Cell')['Sales'].first()
# Store the lasts
df_last = df.groupby('Cell')['Sales'].last()
df_new = pd.DataFrame(columns=df.columns)
for row in df_first.index:
df_temp = df[df.Cell == row]
df_new = df_new.append(df_temp, ignore_index=True)
df_insert = pd.DataFrame({df.columns[0]:'Total',
df.columns[1]:df_last.loc[df_last.index==row],
df.columns[2]:df_first.loc[df_first.index==row]})
df_new = df_new.append(df_insert)
它生成所需的输出: