Это строка после , которая соответствует тому, что вам интересно, не так ли? В sed это можно сделать так:
sed -n '/ABC/{n;p}' infile
В качестве альтернативы вариант grep's A может быть тем, что вы ищете.
-A NUM, Print NUM lines of trailing context after matching lines.
Например, учитывая следующее входной файл:
foo
bar
baz
bash
bongo
Вы можете использовать следующее:
$ grep -A 1 "bar" file
bar
baz
$ sed -n '/bar/{n;p}' file
baz
Надеюсь, что это поможет.
In [20]: df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)})
In [21]: df
Out[21]:
A B values
0 1 1 10
1 1 2 15
2 2 1 20
3 2 2 25
In [22]: df['sum_values_A'] = df.groupby('A')['values'].transform(np.sum)
In [23]: df
Out[23]:
A B values sum_values_A
0 1 1 10 25
1 1 2 15 25
2 2 1 20 45
3 2 2 25 45
Я нашел способ, используя join
:
In [101]:
aggregated = df.groupby('A').sum()['values']
aggregated.name = 'sum_values_A'
df.join(aggregated,on='A')
Out[101]:
A B values sum_values_A
0 1 1 10 25
1 1 2 15 25
2 2 1 20 45
3 2 2 25 45
У кого-то есть более простой способ сделать это?
In [15]: def sum_col(df, col, new_col):
....: df[new_col] = df[col].sum()
....: return df
In [16]: df.groupby("A").apply(sum_col, 'values', 'sum_values_A')
Out[16]:
A B values sum_values_A
0 1 1 10 25
1 1 2 15 25
2 2 1 20 45
3 2 2 25 45
Это не так прямо, но я нашел его очень интуитивным (использование карты для создания новых столбцов из другого столбца) и может быть применено ко многим другим случаям:
gb = df.groupby('A').sum()['values']
def getvalue(x):
return gb[x]
df['sum'] = df['A'].map(getvalue)
df