使用For循环对Pandas DataFrame进行排序和重新排列

五月

我有一个下面的数据框

df = pd.DataFrame([['NY','R',1],
                  ['NJ','Y',12],
                  ['FL','B',20],
                  ['CA','B',40],
                  ['AZ','Y',51],
                  ['NY','R',2],
                  ['NJ','Y',18],
                  ['FL','B',30],
                  ['CA','B',20],
                  ['AZ','Y',45],
                  ['NY','Y',3],
                  ['NJ','R',15],
                  ['FL','R',10],
                  ['CA','R',70],
                  ['AZ','B',25],
                  ['NY','B',4],
                  ['NJ','B',17],
                  ['FL','Y',30],
                  ['CA','R',30],
                  ['AZ','B',75],
                  ['FL','R',5],
                  ['FL','Y',25],
                  ['NJ','R',14],
                  ['NJ','B',11],
                  ['NY','B',5],
                  ['NY','Y',7]],
                    columns = ['State', 'ID','data'])


State ID  data
0     NY  R     1
1     NJ  Y    12
2     FL  B    20
3     CA  B    40
4     AZ  Y    51
5     NY  R     2
6     NJ  Y    18
7     FL  B    30
8     CA  B    20
9     AZ  Y    45
10    NY  Y     3
11    NJ  R    15
12    FL  R    10
13    CA  R    70
14    AZ  B    25
15    NY  B     4
16    NJ  B    17
17    FL  Y    30
18    CA  R    30
19    AZ  B    75
20    FL  R     5
21    FL  Y    25
22    NJ  R    14
23    NJ  B    11
24    NY  B     5
25    NY  Y     7

我想做的是:重新创建一个新的数据框,使其仅包含状态的eachID中的最小数字。例如:对于州:NY和ID:R,有2个数据:1和2。新数据框将仅取值:对于州:NY和ID:R类别为1。新数据框最好如下所示:

  State  dataR  dataB  dataY
0    NY    1.0      4    3.0
1    NJ   14.0     11   12.0
2    FL    5.0     20   25.0
3    CA   30.0     20    NaN
4    AZ    NaN     25   45.0

请注意:结果AZ和CA的列dataR和dataY分别没有任何值(NaN),因为它们最初在原始数据帧中没有这样的值。还请注意,结果中的列变为dataR,dataB和dataY。我的目标是在结果中创建这些列,以便以后可以轻松地在实际数据中读取结果。

AND:我也想保持灵活性,这样我就可以在每个ID R&Y和B的数据中寻求每个州的最小值,因此新数据框将如下所示:

  State  dataRY  dataB
0    NY       1      4
1    NJ      12     11
2    FL       5     20
3    CA      30     20
4    AZ      45     25

我尝试使用for循环,如下所示:

colours = [['R'],['B'],['Y']]

def rearranging(df):
    df_result = []
    for c in colours:
        df_colours          = df[df['ID'].isin(c)]
        df_colours_result   = []
        for state in np.unique(df['State'].values):
            df1     = df_colours[df_colours['State'] == state]
            df2     = df1.nsmallest(1,'data')
            df_colours_result.append(df2)
        first_loop_result = pd.concat(df_colours_result,ignore_index = True, sort = False)
        df_result.append(first_loop_result)
    final_result = pd.concat(df_result, axis = 1)
    return final_result

可变颜色应该在那儿,因为我想灵活一些,以便在以后的数据源更改时可以更改它们的值。

上面的for循环的结果是:

  State   ID  data State ID  data State   ID  data
0    CA    R  30.0    AZ  B    25    AZ    Y  45.0
1    FL    R   5.0    CA  B    20    FL    Y  25.0
2    NJ    R  14.0    FL  B    20    NJ    Y  12.0
3    NY    R   1.0    NJ  B    11    NY    Y   3.0
4   NaN  NaN   NaN    NY  B     4   NaN  NaN   NaN

我不喜欢我的结果,因为:很难阅读,我需要重新排列并重新命名列。无论如何,通过使用for循环可以获得我实际上针对上述结果的结果?也欢迎矢量化。

也请再次通知我,我也想对列ID保持灵活性。例如,这就是我要包括的原因,例如,我想说的是,我需要查看ID R&Y组合和ID B的每个州的最小数据值。在我的尝试中,我仅更改了以下代码,使循环保持不变:

colours = [['R','Y'],['B']]


结果是:

  State ID  data State ID  data
0    AZ  Y    45    AZ  B    25
1    CA  R    30    CA  B    20
2    FL  R     5    FL  B    20
3    NJ  Y    12    NJ  B    11
4    NY  R     1    NY  B     4

注意:相比之下,如果存在NaN,则NaN会被忽略(不会被视为零)。

再次,结果与我的目标不同,该表的信息不足。

ky

IIUC,groupby()列的StateandID和getmin使用data,并add_prefix根据需要unstack():

df.groupby(['State','ID'],sort=False)['data'].min().unstack().add_prefix('data_')

ID     data_R  data_Y  data_B
State                        
NY        1.0     3.0     4.0
NJ       14.0    12.0    11.0
FL        5.0    25.0    20.0
CA       30.0     NaN    20.0
AZ        NaN    45.0    25.0

编辑:根据要求由OP,如果要合并YR在一起,只需更换和做类似:

(df.assign(ID=df['ID'].replace(['Y','R'],'YR'))
    .groupby(['State','ID'],sort=False)['data'].min().unstack().add_prefix('data_'))

ID     data_YR  data_B
State                 
NY           1       4
NJ          12      11
FL           5      20
CA          30      20
AZ          45      25

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Pandas重新排列DataFrame?

来自分类Dev

使用Linq对组中的学生进行排序,然后重新排列组顺序

来自分类Dev

Python Pandas对组间进行排序,而不对组内进行排序(重新排列分组行,但在groupby之前保持原始行顺序

来自分类Dev

使用SwiftUI导航视图和已排序的FetchRequest在详细信息视图中重新排列列表项时的问题

来自分类Dev

使用xslt复制和重新排列XML节点

来自分类Dev

使用 jquery 和 AngularJS 重新排列列拖放

来自分类Dev

如何在不重新排列索引的情况下使用键 DESC 对多维 PHP 数组进行排序(可以删除这些元素)

来自分类Dev

如何将每日流排放数据重新排列为月格式并使用 R 对每个月的排放值进行排序

来自分类Dev

使用角度foreach循环重新排列JSON

来自分类Dev

重新格式化和重新排列Python Pandas系列中的日期

来自分类Dev

计算,排序和重新排列组件

来自分类Dev

重新排列pandas DataFrame的列,以使总数最高的列排在第一

来自分类Dev

如何将包含坐标列表的Pandas DataFrame重新排列到表中?

来自分类Dev

使用pandas python重新排列csv中的行值

来自分类Dev

Pandas-具有相同标题的多个标签的数据透视和重新排列表

来自分类Dev

使用批处理重新排列数字

来自分类Dev

使用ASM重新排列GOTO [JAVA]

来自分类Dev

使用awk重新排列列

来自分类Dev

使用python重新排列数据框

来自分类Dev

使用VBA重新排列数据

来自分类Dev

通过使用xslt添加和重新排列节点来重写XML结果树

来自分类Dev

在R中对Excel数据表进行排序和重新排列

来自分类Dev

通过重新排列行和列对二维表进行排序

来自分类Dev

使用键盘快捷键重新排列/重新排列选项卡

来自分类Dev

对包含日期的数组进行排序并重新排列索引

来自分类Dev

如何在Java脚本循环中重新排列数字?

来自分类Dev

从文本文件中递归提取值,然后循环遍历更多值,并重新排列行和列

来自分类Dev

重新排列排序的数组

来自分类Dev

Python 和 Pandas - 基于排序后和基于日期而不是使用循环对列进行编号

Related 相关文章

  1. 1

    如何使用Pandas重新排列DataFrame?

  2. 2

    使用Linq对组中的学生进行排序,然后重新排列组顺序

  3. 3

    Python Pandas对组间进行排序,而不对组内进行排序(重新排列分组行,但在groupby之前保持原始行顺序

  4. 4

    使用SwiftUI导航视图和已排序的FetchRequest在详细信息视图中重新排列列表项时的问题

  5. 5

    使用xslt复制和重新排列XML节点

  6. 6

    使用 jquery 和 AngularJS 重新排列列拖放

  7. 7

    如何在不重新排列索引的情况下使用键 DESC 对多维 PHP 数组进行排序(可以删除这些元素)

  8. 8

    如何将每日流排放数据重新排列为月格式并使用 R 对每个月的排放值进行排序

  9. 9

    使用角度foreach循环重新排列JSON

  10. 10

    重新格式化和重新排列Python Pandas系列中的日期

  11. 11

    计算,排序和重新排列组件

  12. 12

    重新排列pandas DataFrame的列,以使总数最高的列排在第一

  13. 13

    如何将包含坐标列表的Pandas DataFrame重新排列到表中?

  14. 14

    使用pandas python重新排列csv中的行值

  15. 15

    Pandas-具有相同标题的多个标签的数据透视和重新排列表

  16. 16

    使用批处理重新排列数字

  17. 17

    使用ASM重新排列GOTO [JAVA]

  18. 18

    使用awk重新排列列

  19. 19

    使用python重新排列数据框

  20. 20

    使用VBA重新排列数据

  21. 21

    通过使用xslt添加和重新排列节点来重写XML结果树

  22. 22

    在R中对Excel数据表进行排序和重新排列

  23. 23

    通过重新排列行和列对二维表进行排序

  24. 24

    使用键盘快捷键重新排列/重新排列选项卡

  25. 25

    对包含日期的数组进行排序并重新排列索引

  26. 26

    如何在Java脚本循环中重新排列数字?

  27. 27

    从文本文件中递归提取值,然后循环遍历更多值,并重新排列行和列

  28. 28

    重新排列排序的数组

  29. 29

    Python 和 Pandas - 基于排序后和基于日期而不是使用循环对列进行编号

热门标签

归档