Python 2.7 Python中Pivot和Transpose的组合

Python 2.7 Python中Pivot和Transpose的组合,python-2.7,pandas,Python 2.7,Pandas,我正在做一些文本分析,有一个数据是这样的 **TABLE 1** C1 C2 C3 A1 TEXT1 ANOTHER_TEXT1 A2 TEXT1 ANOTHER_TEXT1 B1 TEXT2 ANOTHER_TEXT1 B2 TEXT2 ANOTHER_TEXT1 B3 TEXT2 ANOTHER_TEXT1 D1 TEXT3 ANOTHER_TEXT2 D2 TEXT3 ANOTHER_TEXT2 我真正需要的是一个在C2上

我正在做一些文本分析,有一个数据是这样的

**TABLE 1**
C1   C2          C3

A1  TEXT1   ANOTHER_TEXT1
A2  TEXT1   ANOTHER_TEXT1
B1  TEXT2   ANOTHER_TEXT1
B2  TEXT2   ANOTHER_TEXT1
B3  TEXT2   ANOTHER_TEXT1
D1  TEXT3   ANOTHER_TEXT2
D2  TEXT3   ANOTHER_TEXT2
我真正需要的是一个在C2上聚合的数据集,以及C1作为不同列的内容。本质上,df.transpose应该做什么。 但问题是,如果我转置,它不会聚合C2和C3

本质上,这就是我所看到的结构

**TABLE 2**
 C1              C2    CT1  CT2  CT3

ANOTHER_TEXT1   TEXT1   A1   A2   NA
ANOTHER_TEXT1   TEXT2   B1   B2   B3
ANOTHER_TEXT2   TEXT3   D1   D2   NA
我正在尝试df.pivot_tableindex=['C2','C3'],aggfunc='count',它给出了发生次数的计数,如下所示

**TABLE 3**
 C1              C2    CT1
ANOTHER_TEXT1   TEXT1   2
                TEXT2   3
ANOTHER_TEXT2   TEXT3   2
那么,我怎样才能把它放到我想要的表2中呢?有可能吗

如果没有,我还有什么选择?如中所示,哪种结构最接近我想要的结构。

您可以用于新列,然后通过,last:

groupby的另一个解决方案,对于新列,使用系列构造函数:

df = df.groupby(['C2','C3'])['C1'] \
       .apply(lambda x: pd.Series(x.values)) \
       .unstack() \
       .rename(columns=lambda x: 'CT{}'.format(x+1)) \
       .reset_index()
print (df)
      C2             C3 CT1 CT2   CT3
0  TEXT1  ANOTHER_TEXT1  A1  A5    A2
1  TEXT2  ANOTHER_TEXT1  B1  B2    B3
2  TEXT3  ANOTHER_TEXT2  D1  D2  None
可以用于新列,然后通过,最后,使用重塑形状:

groupby的另一个解决方案,对于新列,使用系列构造函数:

df = df.groupby(['C2','C3'])['C1'] \
       .apply(lambda x: pd.Series(x.values)) \
       .unstack() \
       .rename(columns=lambda x: 'CT{}'.format(x+1)) \
       .reset_index()
print (df)
      C2             C3 CT1 CT2   CT3
0  TEXT1  ANOTHER_TEXT1  A1  A5    A2
1  TEXT2  ANOTHER_TEXT1  B1  B2    B3
2  TEXT3  ANOTHER_TEXT2  D1  D2  None
添加reset_索引以获得您想要的内容

df.set_index(
    ['C2', 'C3', df.groupby('C2').cumcount() + 1]
).C1.unstack().rename(columns='CT{}'.format).reset_index()

      C2             C3 CT1 CT2   CT3
0  TEXT1  ANOTHER_TEXT1  A1  A2  None
1  TEXT2  ANOTHER_TEXT1  B1  B2    B3
2  TEXT3  ANOTHER_TEXT2  D1  D2  None
添加reset_索引以获得您想要的内容

df.set_index(
    ['C2', 'C3', df.groupby('C2').cumcount() + 1]
).C1.unstack().rename(columns='CT{}'.format).reset_index()

      C2             C3 CT1 CT2   CT3
0  TEXT1  ANOTHER_TEXT1  A1  A2  None
1  TEXT2  ANOTHER_TEXT1  B1  B2    B3
2  TEXT3  ANOTHER_TEXT2  D1  D2  None