Pandas:为现有数据框添加新列以进行分组

时间:2016-09-29 09:12:45

标签: python pandas dataframe grouping bar-chart

我有一个pandas数据框,由2000行x 8列组成。我希望能够将前4列和其他4列组合在一起,但我无法弄清楚如何。目的是创建一个分类条形图,颜色根据C1 = C5,C2 = C6分配,等等。

我的数据框:

In[1]: df.head(5)
Out[1]: 

    C1  C2  C3  C4  C5  C6  C7  C8
0   15  37  17  10  8   11  19  86
1   39  84  11  5   5   13  9   11
2   10  20  30  51  74  62  56  58
3   88  2   1   3   9   6   0   17
4   17  17  32  24  91  45  63  48

您是否建议添加其他列,例如df['Gr']或其他什么?

2 个答案:

答案 0 :(得分:3)

您可以使用MultiIndex.from_arrays

df.columns = pd.MultiIndex.from_arrays([['a'] * 4 + ['b'] * 4 , df.columns])
print (df)
    a               b            
   C1  C2  C3  C4  C5  C6  C7  C8
0  15  37  17  10   8  11  19  86
1  39  84  11   5   5  13   9  11
2  10  20  30  51  74  62  56  58
3  88   2   1   3   9   6   0  17
4  17  17  32  24  91  45  63  48

然后您可以使用xsDataFrame.plot.bar

import matplotlib.pyplot as plt

f, a = plt.subplots(2,1)
df.xs('a', axis=1).plot.bar(ax=a[0])
df.xs('b', axis=1).plot.bar(ax=a[1])
plt.show()

graph

import matplotlib.pyplot as plt

df.columns = pd.MultiIndex.from_arrays([['a'] * 4 + ['b'] * 4 , df.columns])
df.stack(0).T.plot.bar(rot='0', legend=False)

df.columns = ['a'] * 4 + ['b'] * 4
df = df.T.plot.bar(rot='0')

plt.show()

答案 1 :(得分:1)

使用pd.concat

pd.concat([df.iloc[:, :4], df.iloc[:, 4:]], axis=1, keys=['first4', 'second4'])

enter image description here