我有这样的数据;

>> df
    A  B  C
0   1  5  1
1   1  7  1
2   1  6  1
3   1  7  1
4   2  5  1
5   2  8  1
6   2  6  1
7   3  7  1
8   3  9  1
9   4  6  1
10  4  7  1
11  4  1  1


我想根据A列获取B列的最大值和最小值(对于A列的每个相同值,我想在B列中找到最小值和最大值),并想在原始表上写入结果。我的代码是:

df1 = df.groupby(['A']).B.transform(max)
df1 = df1.rename(columns={'B':'B_max'})
df2 = df.groupby.(['A']).B.transform(min)
df1 = df1.rename(columns={'B':'B_min'})
df3 = df.join(df1['B_max']).join(df2['B_min'])


这就是结果。

    A  B  C  B_max  B_min
0   1  5  1
1   1  7  1  7
2   1  6  1
3   1  4  1           4
4   2  5  1
5   2  8  1  8
6   2  6  1           6
7   3  7  1           7
8   3  9  1  9
9   4  6  1
10  4  7  1  7
11  4  1  1           1


但是我想桌子看起来像这样;

    A  B  C  B_max  B_min
0   1  5  1  7        4
1   1  7  1  7        4
2   1  6  1  7        4
3   1  4  1  7        4
4   2  5  1  8        6
5   2  8  1  8        6
6   2  6  1  8        6
7   3  7  1  9        7
8   3  9  1  9        7
9   4  6  1  7        1
10  4  7  1  7        1
11  4  1  1  7        1


解释代码以使结果看起来像这样

最佳答案

我认为您只需要为新列分配值,因为transform返回与Series相同长度的df

df = pd.DataFrame({
'A': [1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4],
'B': [5, 7, 6, 7, 5, 8, 6, 7, 9, 6, 7, 1],
'C': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]})

print (df)
    A  B  C
0   1  5  1
1   1  7  1
2   1  6  1
3   1  7  1
4   2  5  1
5   2  8  1
6   2  6  1
7   3  7  1
8   3  9  1
9   4  6  1
10  4  7  1
11  4  1  1




df['B_max'] = df.groupby(['A']).B.transform(max)
df['B_min'] = df.groupby(['A']).B.transform(min)

print (df)
    A  B  C  B_max  B_min
0   1  5  1      7      5
1   1  7  1      7      5
2   1  6  1      7      5
3   1  7  1      7      5
4   2  5  1      8      5
5   2  8  1      8      5
6   2  6  1      8      5
7   3  7  1      9      7
8   3  9  1      9      7
9   4  6  1      7      1
10  4  7  1      7      1
11  4  1  1      7      1




g = df.groupby('A').B
df['B_max'] = g.transform(max)
df['B_min'] = g.transform(min)

print (df)
    A  B  C  B_max  B_min
0   1  5  1      7      5
1   1  7  1      7      5
2   1  6  1      7      5
3   1  7  1      7      5
4   2  5  1      8      5
5   2  8  1      8      5
6   2  6  1      8      5
7   3  7  1      9      7
8   3  9  1      9      7
9   4  6  1      7      1
10  4  7  1      7      1
11  4  1  1      7      1

关于python - Pandas :如何获取最大值和最小值并为每一行写?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41144562/

10-14 09:59