我有以下Pandas数据帧:
name1 name2
A B
A A
A C
A A
B B
B A
我想添加一个名为new
的列,该列按name1
组计算name1
与name2
的相同频率。
因此,预期输出是以下数据帧:
name1 name2 new
A B 2
A A 2
A C 2
A A 2
B B 1
B A 1
我尝试过以下操作,但收到错误:
df['new'] = df.groupby('name1').apply(lambda x: (x[x['name1'] == x['name2']].fillna(False).sum()))
TypeError:带有帧索引的插入列的不兼容索引
答案 0 :(得分:4)
您可以将MEDIA_URL = '/media/'
与name1
进行比较,然后按name2
和name1
分组进行分组:
sum
或者如果使用df['new'] = df.name2.eq(df.name1).astype(int).groupby(df.name1).transform('sum')
df
# name1 name2 new
#0 A B 2
#1 A A 2
#2 A C 2
#3 A A 2
#4 B B 1
#5 B A 1
,首先汇总计数,然后使用apply
生成map
列:
new
时序:
cnt = df.groupby('name1').apply(lambda g: (g.name1 == g.name2).sum())
df['new'] = df.name1.map(cnt)