Python pandas转置数据问题

时间:2016-07-06 05:57:15

标签: python pandas

我无法弄清楚如何在DataFrame中正确转置数据,以便计算实际值和目标之间的差异。执行以下操作:
df['difference'] = df['Revenue'] - df['Target']
很简单,因此这更像是所需输出格式的问题。

假设您有一个包含以下列和值的DataFrame:

enter image description here

欲望输出将来自两个来源和Source级别的比较。假设有30多个类似于收入,用户和新用户的其他数据点...... enter image description here



enter image description here


非常感谢任何和所有建议。

1 个答案:

答案 0 :(得分:1)

设置

df = pd.DataFrame([
        ['2016-06-01', 15000, 10000, 1000, 900, 100, 50, 'US'],
        ['2016-06-01', 16000, 12000, 1500, 1200, 150, 100, 'UK']
    ], columns=['Date', 'Revenue', 'Target', 'Users', 'Target', 'New Users', 'Target', 'Source'])
df

enter image description here

您的列不是唯一的。我首先将SourceDate移到索引中并重命名列。

df1 = df.copy()
df1.Date = pd.to_datetime(df1.Date)
df1 = df1.set_index(['Date', 'Source'])
idx = pd.MultiIndex.from_product([['Revenue', 'Users', 'New Users'], ['Actual', 'Target']])
df1.columns = idx
df1

enter image description here

然后将columns的第一个级别移至index

df1 = df1.stack(0)
df1

enter image description here

从这里开始,我将在['Revenue', 'Users', 'New Users']之间汇总来源,并将结果分配给df2

df2 = df1.groupby(level=-1).sum()
df2

enter image description here

最后:

df2['Difference'] = df2.Actual / df2.Target
df1['Difference'] = df1.Actual / df1.Target

df2

enter image description here

df1.stack().unstack([0, 1, -1])

enter image description here