根据需要将 python 数据框更改为枢轴
Changing python data-frame to pivot as per need
我有一个如下所示的数据框:
ID1 ID2 YrMonth Class
1 p1 Feb-19 PE5
1 p1 Feb-19 PE5
1 p1 Feb-19 PE5
1 p1 Feb-19 SC
1 p2 Feb-19 SC
1 p2 Feb-19 SC
1 p2 Feb-19 SC
1 p3 Feb-19 EA
1 p3 Feb-19 EA
1 p3 Feb-19 PE5
1 p4 Feb-19 EA
1 p4 Feb-19 PE5
1 p4 Feb-19 SC
我想将它转换成另一个数据框或数据透视表,这样在给定的月份对于特定的 ID2,如果 class 中有转换,它应该反映在输出中给定的行中
table。
对于 ex - 在 ID2 中,p1 class 从 PE5 更改为 SC。在输出中我表示为 PE5->SC 但它也可以是其他方便的表示。
如果特定 ID2 的 class 没有变化,class 应该出现在第二行输出中 table class 仅是 SC .
对于 ID2 p3,在 class 中存在从 EA 到 PE5 的转换,因此它表示为 EA->PE5。
对于 ID2 p4,在 class 中存在从 EA-PE5-SC 的转换,因此它表示为 EA->PE5->SC
输出pivot/dataframe
ID1 ID2 YrMonth Class
1 p1 Feb-19 PE5->SC
1 p2 Feb-19 SC
1 p3 Feb-19 EA->PE5
1 p4 Feb-19 EA->PE5->SC
使用 DataFrame.drop_duplicates
和聚合 join
:
df1 = (df.drop_duplicates()
.groupby(['ID1','ID2','YrMonth'])['Class']
.agg('->'.join).reset_index())
print (df1)
ID1 ID2 YrMonth Class
0 1 p1 Feb-19 PE5->SC
1 1 p2 Feb-19 SC
2 1 p3 Feb-19 EA->PE5
3 1 p4 Feb-19 EA->PE5->SC
如果需要指定列来删除重复项:
df1 = (df.drop_duplicates(['ID1','ID2','YrMonth','Class'])
.groupby(['ID1','ID2','YrMonth'])['Class']
.agg('->'.join).reset_index())
print (df1)
我有一个如下所示的数据框:
ID1 ID2 YrMonth Class
1 p1 Feb-19 PE5
1 p1 Feb-19 PE5
1 p1 Feb-19 PE5
1 p1 Feb-19 SC
1 p2 Feb-19 SC
1 p2 Feb-19 SC
1 p2 Feb-19 SC
1 p3 Feb-19 EA
1 p3 Feb-19 EA
1 p3 Feb-19 PE5
1 p4 Feb-19 EA
1 p4 Feb-19 PE5
1 p4 Feb-19 SC
我想将它转换成另一个数据框或数据透视表,这样在给定的月份对于特定的 ID2,如果 class 中有转换,它应该反映在输出中给定的行中 table。 对于 ex - 在 ID2 中,p1 class 从 PE5 更改为 SC。在输出中我表示为 PE5->SC 但它也可以是其他方便的表示。
如果特定 ID2 的 class 没有变化,class 应该出现在第二行输出中 table class 仅是 SC .
对于 ID2 p3,在 class 中存在从 EA 到 PE5 的转换,因此它表示为 EA->PE5。
对于 ID2 p4,在 class 中存在从 EA-PE5-SC 的转换,因此它表示为 EA->PE5->SC
输出pivot/dataframe
ID1 ID2 YrMonth Class
1 p1 Feb-19 PE5->SC
1 p2 Feb-19 SC
1 p3 Feb-19 EA->PE5
1 p4 Feb-19 EA->PE5->SC
使用 DataFrame.drop_duplicates
和聚合 join
:
df1 = (df.drop_duplicates()
.groupby(['ID1','ID2','YrMonth'])['Class']
.agg('->'.join).reset_index())
print (df1)
ID1 ID2 YrMonth Class
0 1 p1 Feb-19 PE5->SC
1 1 p2 Feb-19 SC
2 1 p3 Feb-19 EA->PE5
3 1 p4 Feb-19 EA->PE5->SC
如果需要指定列来删除重复项:
df1 = (df.drop_duplicates(['ID1','ID2','YrMonth','Class'])
.groupby(['ID1','ID2','YrMonth'])['Class']
.agg('->'.join).reset_index())
print (df1)