Как объединить сгруппированные кадры данных в пандах с тем же типом сортировки? - PullRequest
0 голосов
/ 12 марта 2019

У меня есть два сгруппированных кадра данных с номером недели и person в качестве индекса группы. Сгруппированный результат имеет отсортированный порядок r номера недели.

Но если я объединю эти два сгруппированных кадра данных, порядок номера недели станет лексическим.

Как я могу убедиться, что порядок объединенных кадров данных подобен сгруппированным, а не лексически?

    df1 = pd.DataFrame(np.array([[1, 'Person A', 3],[1, 'Person C', 9],[1, 'Person C', 2],[10, 'Person D', 9],[2, 'Person K', 9]]),columns=['Week', 'Name', 'Value'])
    df1[["Week", "Value"]] = df1[["Week", "Value"]].apply(pd.to_numeric)

    df2 = pd.DataFrame(np.array([[1, 'Person A', 1], [1, 'Person B', 6], [1, 'Person C', 9], [9, 'Person D', 9], [10, 'Person D', 9]]),columns=['Week', 'Name', 'Value'])
    df2[["Week", "Value"]] = df2[["Week", "Value"]].apply(pd.to_numeric)

    grouped = df1.groupby(['Week', 'Name']).sum().add(df2.groupby(['Week', 'Name']).sum(), fill_value=0)
    grouped = grouped.sort_index(ascending=True)

    df3 = pd.DataFrame(np.array([[1, 'Person A', 1],[1, 'Person C', 2],[1, 'Person C', 3],[10, 'Person D', 9],[2, 'Person K', 4]]),columns=['Week', 'Name', 'Value'])
    df3[["Week", "Value"]] = df3[["Week", "Value"]].apply(pd.to_numeric)

    df4 = pd.DataFrame(np.array([[1, 'Person A', 1], [1, 'Person E', 123], [1, 'Person C', 3], [9, 'Person D', 4], [10, 'Person D', 5]]),columns=['Week', 'Name', 'Value'])
    df4[["Week", "Value"]] = df4[["Week", "Value"]].apply(pd.to_numeric)

    grouped2 = df3.groupby(['Week', 'Name']).sum().add(df4.groupby(['Week', 'Name']).sum(), fill_value=0)
    grouped2 = grouped2.sort_index(ascending=True)


    grouped = grouped.rename(index=str, columns={"Value": "Value1"})
    grouped2 = grouped2.rename(index=str, columns={"Value": "Value2"})


    print(grouped)
    print(grouped2)

               Value1
Week Name            
1    Person A     4.0
     Person B     6.0
     Person C    20.0
2    Person K     9.0
9    Person D     9.0
10   Person D    18.0
               Value2
Week Name            
1    Person A     2.0
     Person C     8.0
     Person E   123.0
2    Person K     4.0
9    Person D     4.0
10   Person D    14.0

concated = pd.concat([grouped, grouped2], axis=1, sort=True)
print(concated)

              Value1  Value2
Week Name                    
1    Person A     4.0     2.0
     Person B     6.0     NaN
     Person C    20.0     8.0
     Person E     NaN   123.0
10   Person D    18.0    14.0
2    Person K     9.0     4.0
9    Person D     9.0     4.0

Версия для панд: 0.24.1

1 Ответ

0 голосов
/ 13 марта 2019

Я нашел решение с помощью natsort для сортировки мультииндексов: concated = concated.reindex(natsorted(concated.index))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...