Столбцы GroupBy на префиксе заголовка столбца

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

input:

a={'Dates':['2012-06-08','2012-06-10'],'Date_value':[388,389]}

output:

{'Date_value': [388, 389], 'Dates': ['2012-06-08', '2012-06-10']}

input:

aframe=DataFrame(a)

output: будет вашим DataFrame

Вам просто нужно использовать какое-то редактирование текста где-то вроде Sublime или, может быть, Excel .

2
задан coldspeed 16 January 2019 в 17:55
поделиться

2 ответа

Во-первых, необходимо определить, какие столбцы содержат какой префикс. Затем мы используем это для выполнения groupby.

grouper = [next(p for p in prefixes if p in c) for c in df.columns]
u = df.groupby(grouper, axis=1).sum()

   ab  wx
0   3   7
1   3   7
2   3   7
3   3   7

Почти там, сейчас,

u.sum().to_frame().T

   ab  wx
0  12  28

Другой вариант использует np.char.startswith и argmax для векторизации:

idx = np.char.startswith(
    df.columns.values[:, None].astype(str), prefixes).argmax(1)

(pd.Series(df.groupby(idx, axis=1).sum().sum().values, index=prefixes)
   .to_frame()
   .transpose())

   ab  wx
0  12  28
0
ответ дан coldspeed 16 January 2019 в 17:55
поделиться

Использование groupby после разрезания столбцов

df.groupby(df.columns.str[:-1],axis=1).sum().sum().to_frame().T
Out[317]: 
   ab  wx
0  12  28

Обновление

l=sum([[x]*df.columns.str.startswith(x).sum() for x in prefixes],[])
df.groupby(l,axis=1).sum().sum().to_frame().T
Out[329]: 
   ab  wx
0  12  28
0
ответ дан Wen-Ben 16 January 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: