我使用了熊猫melt
函数来制作一个看起来几乎像张桌子的桌子,
ref Class Sam
A v1 1
A v2 1
A v2 1
B v1 1
C v2 1
A v1 2
B v2 2
B v3 2
C v1 2
我正在尝试使用pivot_table
函数创建矩阵
melt.pivot_table(index='ref', columns='Sam', values='Class', aggfunc=lambda x: ';'.join(x.unique())).fillna('')
哪个给我这样的东西
1 2
A v1;v2 v1
B v1 v2;v3
C v2 v1
相反,我想编辑此代码,使其将多次出现替换为字符串,同时保持一次出现。
例如;
1 2
A MultiHit v1
B v1 MultiHit
C v2 v1
有什么建议吗?
如果我的问题不清楚,请告诉我。
答案 0 :(得分:0)
将replace
与regex=True
一起使用
df.pivot_table(index='ref', columns='Sam', values='Class', aggfunc=lambda x: ';'.join(x.unique())).fillna('').replace('(\w+;\w+|;\w+)+','MultiHit',regex=True)
Sam 1 2
ref
A MultiHit v1
B v1 MultiHit
C v2 v1
答案 1 :(得分:0)
我将使用groupby
并在需要的地方进行更新,然后拆栈:
# replace count with nunique if necessary
new_df = df.groupby(['ref','Sam'])['Class'].agg({'count','first'})
new_df.loc[new_df['count'].gt(1), 'first'] = 'MultiHit'
new_df['first'].unstack('Sam')
输出:
Sam 1 2
ref
A MultiHit v1
B v1 MultiHit
C v2 v1
也可以使用枢轴,而无需以后拆卸:
new_df = df.pivot_table(index='ref',
columns='Sam',
values='Class',
aggfunc=['count', 'first'])
new_df.loc[:,'first'] = np.where(new_df.loc[:,'count'].gt(1),
'MultiHist',
new_df.loc[:,'first'])
new_df.loc[:,'first']
也给出相同的输出。