我有一个像这样的数据框
Page KeyWord date
1 hello mon
1 good mon
2 holy tues
2 brown wed
2 crazy wed
需要输出数据帧
Page KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3
1 hello good NULL mon mon NULL
2 holy brown crazy tues wed wed
基本上数据框应该添加足够的列来满足最大数量的重复页码,所以在上面的例子中,我们看到有3个重复的页面(第3页有3个实例)所以它应该添加许多编号除了groupby列之外的重复列。
只是为了展示另一个例子
输入:
Page KeyWord date
1 hello mon
1 good mon
2 holy tues
2 brown wed
输出:
Page KeyWord_1 KeyWord_2 date_1 date_2
1 hello good mon mon
2 holy brown tues wed
答案 0 :(得分:1)
一种方式,转到MultiIndex:
cleanup: true
如果确实需要,您可以将列展平:
In [11]: res = df.pivot_table(index="Page", columns=df.groupby("Page").cumcount(), aggfunc="first")
In [12]: res
Out[12]:
KeyWord date
0 1 2 0 1 2
Page
1 hello good None mon mon None
2 holy brown crazy tues wed wed
答案 1 :(得分:1)
df['new']=df.groupby('Page').cumcount().add(1)
df=df.set_index(['Page','new']).unstack()
df.columns=df.columns.map('{0[0]}_{0[1]}'.format)
Out[870]:
KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3
Page
1 hello good None mon mon None
2 holy brown crazy tues wed wed
答案 2 :(得分:0)
您可以使用pivot_table
功能来实现此目的。下面的代码将为您完成工作:
import pandas as pd
df = pd.DataFrame([
[1, "hello", "mon"],
[1, "good", "mon"],
[2, "holy", "tues"],
[2, "brown", "wed"],
[2, "crazy", "wed"]])
df.columns = ["Page", "KeyWord", "date"]
df_out = pd.pivot_table(df, index="Page", values = ["KeyWord","date"], columns = df.groupby(['Page']).cumcount()+1, aggfunc="first")
df_out.columns = [key + "_" + str(date) for key, date in df_out.columns]
因此,如果您的原始DataFrame
是:
>>> df
Page KeyWord date
0 1 hello mon
1 1 good mon
2 2 holy tues
3 2 brown wed
4 2 crazy wed
然后df_out
将是:
>>> df_out
KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3
Page
1 hello good None mon mon None
2 holy brown crazy tues wed wed