Pandas 用第一行值替换每个组中的行。熊猫群比

Pandas 用第一行值替换每个组中的行。熊猫群比,pandas,dataframe,pandas-groupby,Pandas,Dataframe,Pandas Groupby,这是一个数据帧: df = pd.DataFrame({'A' : ['foo', 'foo', 'bar', 'bar', 'bar'], 'B' : ['1', '2','2', '4', '1']}) 下面是我想要的样子 下面是我如何尝试和失败的 groups = df.groupby([A]) groups.apply(lambda g: g[g[B] == g[B].first()]).reset_index(drop=True) 你可以做:

这是一个数据帧:

df = pd.DataFrame({'A' : ['foo', 'foo', 'bar', 'bar', 'bar'],
                   'B' : ['1', '2','2', '4', '1']})
下面是我想要的样子

下面是我如何尝试和失败的

groups = df.groupby([A])
groups.apply(lambda g: g[g[B] == g[B].first()]).reset_index(drop=True)
你可以做:

df['B'] = df.groupby('A')['B'].transform('first')
或者,如果数据已按所示的
A
排序:

df['B'] = df['B'].mask(df['A'].duplicated()).ffill()
输出:

     A  B
0  foo  1
1  foo  1
2  bar  2
3  bar  2
4  bar  2
你可以做:

df['B'] = df.groupby('A')['B'].transform('first')
或者,如果数据已按所示的
A
排序:

df['B'] = df['B'].mask(df['A'].duplicated()).ffill()
输出:

     A  B
0  foo  1
1  foo  1
2  bar  2
3  bar  2
4  bar  2

使用
drop_duplicates
+
repeat

s=df.drop_duplicates('A')
s=s.reindex(s.index.repeat(df.A.value_counts()))
Out[555]: 
     A  B
0  foo  1
0  foo  1
0  foo  1
2  bar  2
2  bar  2

使用
drop_duplicates
+
repeat

s=df.drop_duplicates('A')
s=s.reindex(s.index.repeat(df.A.value_counts()))
Out[555]: 
     A  B
0  foo  1
0  foo  1
0  foo  1
2  bar  2
2  bar  2