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