如何用分组数据的最大值填充列 groupby 的行值
how do you fill row values of a column groupby with the max value of the grouped data
我正在尝试用分组数据的最大值填充分组数据中列的值。
以下是数据样本
df1 = [[52, '1', '0'], [52, '1', '1'],
[52, '1', '0'], [52, '2', '0'],
[53, '2', '0'], [52, '2', '0']]
df = pd.DataFrame(df1, columns =['Cow','Lact', 'fail'])
Producing the following dataframe
Cow Lact fail
0 52 1 0
1 52 1 1
2 52 1 0
3 52 2 0
4 53 2 0
5 52 2 0
在这个例子中,我想将 0 值替换为 1(最大值),因为 cow = 52 lact = 1
Cow Lact fail
0 52 1 1
1 52 1 1
2 52 1 1
3 52 2 0
4 53 2 0
5 52 2 0
我修改
中出现的代码失败
grouped = df.groupby(["Cow", "Lact"], as_index=False).max()['fail']
for i in grouped:
if i == 1:
df['fail'] = 1
对我的方法失败的解决方案和澄清表示赞赏。
谢谢
你快到了,直接用transform('max')
:
df['fail'] = df.groupby(["Cow", "Lact"])['fail'].transform('max')
输出:
Cow Lact fail
0 52 1 1
1 52 1 1
2 52 1 1
3 52 2 0
4 53 2 0
5 52 2 0
您可以将分组依据与变换“max”结合使用。我不确定您是想简单地替换 'fail' 列还是想创建一个新列,但这应该能得到预期的结果。
df['fail'] = df.groupby(['Cow', 'Lact'])['fail'].transform(max)
我正在尝试用分组数据的最大值填充分组数据中列的值。
以下是数据样本
df1 = [[52, '1', '0'], [52, '1', '1'],
[52, '1', '0'], [52, '2', '0'],
[53, '2', '0'], [52, '2', '0']]
df = pd.DataFrame(df1, columns =['Cow','Lact', 'fail'])
Producing the following dataframe
Cow Lact fail
0 52 1 0
1 52 1 1
2 52 1 0
3 52 2 0
4 53 2 0
5 52 2 0
在这个例子中,我想将 0 值替换为 1(最大值),因为 cow = 52 lact = 1
Cow Lact fail
0 52 1 1
1 52 1 1
2 52 1 1
3 52 2 0
4 53 2 0
5 52 2 0
我修改
grouped = df.groupby(["Cow", "Lact"], as_index=False).max()['fail']
for i in grouped:
if i == 1:
df['fail'] = 1
对我的方法失败的解决方案和澄清表示赞赏。 谢谢
你快到了,直接用transform('max')
:
df['fail'] = df.groupby(["Cow", "Lact"])['fail'].transform('max')
输出:
Cow Lact fail
0 52 1 1
1 52 1 1
2 52 1 1
3 52 2 0
4 53 2 0
5 52 2 0
您可以将分组依据与变换“max”结合使用。我不确定您是想简单地替换 'fail' 列还是想创建一个新列,但这应该能得到预期的结果。
df['fail'] = df.groupby(['Cow', 'Lact'])['fail'].transform(max)