如何提高pandas索引和设置值的速度

我需要组合两个大型数据框,现在需要几个小时。我想知道是否有更快的方法来做到这一点。下面是示例:df1 包含一些关于衬衫的信息,而 df2 包含关于裤子的信息。我想将它们合并到一个显示所有有效组合的新数据框中。被认为有效的是班次和裤子的“尺寸”和“性别”应该相同,而它们的颜色可以推迟。这是一个简化的示例(实际情况是 df1 和 df2 都可以是 10k 行)

    import pandas as pd
    import itertools
    list_color = ['black','white']
    list_size =  ['S','M','L']
    list_gender = ['M','F']
    list_shirts_price = [11,12,13,14,15,16,17,18]
    lists_shirts = [list_color, list_size, list_gender]
    list_pants_price = [21,22,23,24,25,26,27,28]
    lists_pants = [list_color, list_size, list_gender]
    df_shirts = pd.DataFrame(list(itertools.product(*lists_shirts)), columns=['Color', 'Size', 'Gender','Price'])
    df_shirts['Price'] = list_shirts_price
    df_pants = pd.DataFrame(list(itertools.product(*lists_pants)), columns=['Color', 'Size', 'Gender','Price'])
    df_pants['Price'] = list_pants_price

df_衬衫:

颜色 尺寸 性别 价钱
0 黑色的 11
1 黑色的 F 12
2 黑色的 13
3 黑色的 F 14
4 白色的 15
5 白色的 F 16
6 白色的 17
7 白色的 F 18

回答

避免循环pandas

输入数据:

>>> df_shirts
   Color Size Gender  Price
0  black    S      M     11
1  black    S      F     12
2  black    L      M     13
3  black    L      F     14
4  white    S      M     15
5  white    S      F     16
6  white    L      M     17
7  white    L      F     18

>>> df_pants
   Color Size Gender  Price
0  black    S      M     21
1  black    S      F     22
2  black    L      M     23
3  black    L      F     24
4  white    S      M     25
5  white    S      F     26
6  white    L      M     27
7  white    L      F     28

使用pd.merge

out = pd.merge(df_shirts, df_pants, on=['Size', 'Gender'],
               suffixes=('_shirts', '_pants'))

输出结果:

>>> out
   Color_shirts Size Gender  Price_shirts Color_pants  Price_pants
0         black    S      M            11       black           21
1         black    S      M            11       white           25
2         white    S      M            15       black           21
3         white    S      M            15       white           25
4         black    S      F            12       black           22
5         black    S      F            12       white           26
6         white    S      F            16       black           22
7         white    S      F            16       white           26
8         black    L      M            13       black           23
9         black    L      M            13       white           27
10        white    L      M            17       black           23
11        white    L      M            17       white           27
12        black    L      F            14       black           24
13        black    L      F            14       white           28
14        white    L      F            18       black           24
15        white    L      F            18       white           28

您将索引设置为 ('Size', 'Gender') 以便更好地过滤:

>>> out.set_index(['Size', 'Gender']).sort_index()
            Color_shirts  Price_shirts Color_pants  Price_pants
Size Gender
L    F             black            14       black           24
     F             black            14       white           28
     F             white            18       black           24
     F             white            18       white           28
     M             black            13       black           23
     M             black            13       white           27
     M             white            17       black           23
     M             white            17       white           27
S    F             black            12       black           22
     F             black            12       white           26
     F             white            16       black           22
     F             white            16       white           26
     M             black            11       black           21
     M             black            11       white           25
     M             white            15       black           21
     M             white            15       white           25


以上是如何提高pandas索引和设置值的速度的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>