Вставьте строки, которые добавляют другие значения строк в pandas агрегирующих значениях данных в python / pandas - PullRequest
0 голосов
/ 29 марта 2020

Допустим, у меня есть четыре столбца: [Set, Subset, Cardinality, Index]

Это может быть что-то вроде:

[A, AB, 5, 1]
[A, AC, 8, 1]
[A, AD, 7, 1]
[A, AB, 5, 2]
[A, AC, 9, 2]
[A, AD, 1, 2]
[A, AB, 3, 3]
[A, AC, 5, 3]
[A, AD, 2, 3]

Я хочу добавить новые строки, которые добавляют все подмножество кардинальности для того же набора и индекса и получение:

[A, AB, 5, 1]
[A, AC, 8, 1]
[A, AD, 7, 1]
[A, null, 20, 1]
[A, AB, 5, 2]
[A, AC, 9, 2]
[A, AD, 1, 2]
[A, null, 15, 2]
[A, AB, 3, 3]
[A, AC, 5, 3]
[A, AD, 2, 3]
[A, null, 10, 3]

, где добавленные строки агрегируют кардинальность для тех же «Set» и «Index»

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Используйте GroupBy.sum и DataFrame.append с DataFrame.sort_values для сортировки:

(df.append(df.groupby(['Set', 'Index'], as_index=False).sum())
   .sort_values(['Index','Set', 'Subset']))

Вывод

  Set  Subset   Cardinality   Index
0   A      AB             5       1
1   A      AC             8       1
2   A      AD             7       1
0   A     NaN            20       1
3   A      AB             5       2
4   A      AC             9       2
5   A      AD             1       2
1   A     NaN            15       2
6   A      AB             3       3
7   A      AC             5       3
8   A      AD             2       3
2   A     NaN            10       3
1 голос
/ 29 марта 2020

Используя pandas DataFrames вы можете сделать:

cols=['Set', 'Subset', 'Cardinality', 'Index']
df = pd.DataFrame([['A', 'AB', 5, 1],
                   ['A', 'AC', 8, 1],
                   ['A','AD', 7, 1],
                   ['A', 'AB', 5, 2],
                   ['A', 'AC', 9, 2],
                   ['A', 'AD', 1, 2],
                   ['A', 'AB', 3, 3],
                   ['A', 'AC', 5, 3],
                   ['A', 'AD', 2, 3]],
                  columns = cols)

tmp = df.groupby(['Set', 'Index']).sum().reset_index()
df = pd.concat([df, tmp], axis=0)[cols]
df
  Set Subset  Cardinality  Index
0   A     AB            5      1
1   A     AC            8      1
2   A     AD            7      1
3   A     AB            5      2
4   A     AC            9      2
5   A     AD            1      2
6   A     AB            3      3
7   A     AC            5      3
8   A     AD            2      3
0   A    NaN           20      1
1   A    NaN           15      2
2   A    NaN           10      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...