首页 > 解决方案 > Pandas - 用不同的索引覆盖值

问题描述

堆栈溢出

以下 DataFrame 有 2017 年的收益数据,但 Q4 数据为累积形式。这意味着 2017 年第四季度的收入是 2017 年第三季度、2017 年第二季度和 2017 年第一季度的总和。我想找到 Q.4 收益数据并将其覆盖在现有的 DataFrame 上。

df = pd.DataFrame({'year': [2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017], 
                    'qtr': ['Q1', 'Q1', 'Q2', 'Q2', 'Q3', 'Q3', 'Q4', 'Q4'],
                   'acc_nm': ['revenue', 'net_inc','revenue', 'net_inc','revenue', 'net_inc', 'revenue', 'net_inc'],
                   'acc_value' : [10, 5, 11, 6, 12,7, 45, 26]})


    year    qtr acc_nm  acc_value
0   2017    Q1  revenue 10
1   2017    Q1  net_inc 5
2   2017    Q2  revenue 11
3   2017    Q2  net_inc 6
4   2017    Q3  revenue 12
5   2017    Q3  net_inc 7
6   2017    Q4  revenue 33
7   2017    Q4  net_inc 18

在这里,我找到了第四季度的收益。

df_Total = df[df['qtr'] == 'Q4']['acc_value'].reset_index(drop=True)
df_Q3 = df[df['qtr'] == 'Q3']['acc_value'].reset_index(drop=True)
df_Q2 = df[df['qtr'] == 'Q2']['acc_value'].reset_index(drop=True)
df_Q1 = df[df['qtr'] == 'Q1']['acc_value'].reset_index(drop=True)
df_Q4 = df_Total - (df_Q3 + df_Q2 + df_Q1)
df_Q4

0    12
1     8
Name: acc_value, dtype: int64

df_Q4 dataFrame 的索引从 0 到 1,而 df 的索引从 0 到 7。我不知道如何组合这些。帮助我社区。所需的输出如下。

    year    qtr acc_nm  acc_value
0   2017    Q1  revenue 10
1   2017    Q1  net_inc 5
2   2017    Q2  revenue 11
3   2017    Q2  net_inc 6
4   2017    Q3  revenue 12
5   2017    Q3  net_inc 7
**6 2017    Q4  revenue 12**
**7 2017    Q4  net_inc 8**

标签: pythonpandasdataframe

解决方案


df = pd.DataFrame({'year': [2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017], 
                    'qtr': ['Q1', 'Q1', 'Q2', 'Q2', 'Q3', 'Q3', 'Q4', 'Q4'],
                   'acc_nm': ['revenue', 'net_inc','revenue', 'net_inc','revenue', 'net_inc', 'revenue', 'net_inc'],
                   'acc_value' : [10, 5, 11, 6, 12,7, 45, 26]})

东风:

   year qtr   acc_nm  acc_value
0  2017  Q1  revenue         10
1  2017  Q1  net_inc          5
2  2017  Q2  revenue         11
3  2017  Q2  net_inc          6
4  2017  Q3  revenue         12
5  2017  Q3  net_inc          7
6  2017  Q4  revenue         45
7  2017  Q4  net_inc         26
Q4 = df[  (df.qtr == "Q4") & (df.year == 2017) ]
df = df[~((df.qtr == "Q4") & (df.year == 2017))]

Q4['acc_value'] = (Q4.groupby('acc_nm').acc_value.sum() - df.groupby('acc_nm').acc_value.sum()).sort_index(ascending=False).values
df = pd.concat([df, Q4])

东风:

   year qtr   acc_nm  acc_value
0  2017  Q1  revenue         10
1  2017  Q1  net_inc          5
2  2017  Q2  revenue         11
3  2017  Q2  net_inc          6
4  2017  Q3  revenue         12
5  2017  Q3  net_inc          7
6  2017  Q4  revenue         12
7  2017  Q4  net_inc          8

推荐阅读