Python 熊猫-按一列分组,按另一列排序,从第三列获取值

Python 熊猫-按一列分组,按另一列排序,从第三列获取值,python,pandas,sorting,group-by,Python,Pandas,Sorting,Group By,我想获取pandas dataframe,按一列对其进行分组,按另一列对其进行排序,并从第三列中获取第一个元素,然后填充原始dataframe 这是我的原始df。我想按col_1分组,按col_2(升序)排序,从col_3中提取第一个元素,并用结果填充col_4 df_in = pd.DataFrame({'col_1':['A', 'A', 'A', 'B', 'B', 'B'], 'col_2': [5,9,2, 3,7,1], 'col_3': ['c

我想获取pandas dataframe,按一列对其进行分组,按另一列对其进行排序,并从第三列中获取第一个元素,然后填充原始dataframe

这是我的原始df。我想按col_1分组,按col_2(升序)排序,从col_3中提取第一个元素,并用结果填充col_4

df_in = pd.DataFrame({'col_1':['A', 'A', 'A', 'B', 'B', 'B'], 'col_2': [5,9,2, 3,7,1],
                   'col_3': ['c','d','k','n','l','f']})
[

以下是输出df的外观:

df_out = pd.DataFrame({'col_1':['A', 'A', 'A', 'B', 'B', 'B'], 'col_2': [5,9,2, 3,7,1],
                   'col_3': ['c','d','k','n','l','f'], 'col_4': ['k','k','k','f','f','f'], })

我可以用group和transform完成分组和排序,但如何提取第一个元素还不清楚


很抱歉,无法正确显示图像;-(

请尝试,因为您的索引如图所示

df_in.sort_values('col_2',  inplace=True)
df_in['col_4'] = df_in.groupby('col_1').col_3.transform('first')

df_in.sort_index(inplace=True)
输出:

+----+---------+---------+---------+---------+
|    | col_1   |   col_2 | col_3   | col_4   |
|----+---------+---------+---------+---------|
|  0 | A       |       5 | c       | k       |
|  1 | A       |       9 | d       | k       |
|  2 | A       |       2 | k       | k       |
|  3 | B       |       3 | n       | f       |
|  4 | B       |       7 | l       | f       |
|  5 | B       |       1 | f       | f       |
+----+---------+---------+---------+---------+
  col_1  col_2 col_3 col_4
0     A      5     c     k
1     A      9     d     k
2     A      2     k     k
3     B      3     n     f
4     B      7     l     f
5     B      1     f     f
  col_1  col_2 col_3 col_4
0     A      5     c     k
1     A      9     d     k
2     A      2     k     k
3     B      3     n     f
4     B      7     l     f
5     B      1     f     f
你可以用

first_values = df_in.sort_values(['col_1','col_2']).groupby('col_1')['col_3'].first().rename('col_4')
df_in = df_in.join(first_values, on='col_1')
输出:

+----+---------+---------+---------+---------+
|    | col_1   |   col_2 | col_3   | col_4   |
|----+---------+---------+---------+---------|
|  0 | A       |       5 | c       | k       |
|  1 | A       |       9 | d       | k       |
|  2 | A       |       2 | k       | k       |
|  3 | B       |       3 | n       | f       |
|  4 | B       |       7 | l       | f       |
|  5 | B       |       1 | f       | f       |
+----+---------+---------+---------+---------+
  col_1  col_2 col_3 col_4
0     A      5     c     k
1     A      9     d     k
2     A      2     k     k
3     B      3     n     f
4     B      7     l     f
5     B      1     f     f
  col_1  col_2 col_3 col_4
0     A      5     c     k
1     A      9     d     k
2     A      2     k     k
3     B      3     n     f
4     B      7     l     f
5     B      1     f     f

尝试一些不同的东西
idxmin

s=df_in.groupby(['col_1']).col_2.transform('idxmin')
df_in['New']=df_in.col_3.reindex(s).values
df_in
Out[469]: 
  col_1  col_2 col_3 New
0     A      5     c   k
1     A      9     d   k
2     A      2     k   k
3     B      3     n   f
4     B      7     l   f
5     B      1     f   f
输出:

+----+---------+---------+---------+---------+
|    | col_1   |   col_2 | col_3   | col_4   |
|----+---------+---------+---------+---------|
|  0 | A       |       5 | c       | k       |
|  1 | A       |       9 | d       | k       |
|  2 | A       |       2 | k       | k       |
|  3 | B       |       3 | n       | f       |
|  4 | B       |       7 | l       | f       |
|  5 | B       |       1 | f       | f       |
+----+---------+---------+---------+---------+
  col_1  col_2 col_3 col_4
0     A      5     c     k
1     A      9     d     k
2     A      2     k     k
3     B      3     n     f
4     B      7     l     f
5     B      1     f     f
  col_1  col_2 col_3 col_4
0     A      5     c     k
1     A      9     d     k
2     A      2     k     k
3     B      3     n     f
4     B      7     l     f
5     B      1     f     f

@anky_91与我的答案类似,只是您不需要按
col_1
排序。是否需要
sort_值(['col_1','col_2'])
,我只需要按col_2排序。可能
sort_值(['col_2'])
不够吗?