¿Puedes usar Pandas Groupby para agrupar filas, determinado sumando un valor de columna? -- python campo con pandas campo con dataframe campo con pandas-groupby camp Relacionados El problema

Can you use pandas groupby to group rows, determined by summing a column value?


1
vote

problema

Español

Me gustaría agrupar filas en un contexto de datos por valores de una columna. El ejemplo dado a continuación sería si estuviera agrupando los valores de 'NumberFTrades' por valores de 150, por lo que las 2 filas superiores se agrupan y las filas de la parte inferior se agrupan. El siguiente paso, que entiendo requerirá algunos pasos adicionales es calcular abierto de la primera de cada grupo, cerca de la última de cada grupo, alta desde el más grande de cada grupo y bajo del más pequeño de cada grupo.

  Time     Open   High  Low  Close  NumberOfTrades 17:35     101.1   102  100  101         75 18:42     101     105  101  103         75 18:56     103     108  102  107         50 19:45     107     105  101  103         50 20:01     103     104  101  102         50   
  Time    Open    High  Low  Close  NumberOfTrades 17:35    101.1   105  100  103         150 18:56    103     108  101  102         150   

Uso de df = df.groupby('Time')['NumberOfTrades'].sum(freq=1000).to_frame() Simplemente crea un nuevo contexto de datos con hora de columna y número de imágenes, y asumo agrupando cada 1000 filas. Si bien realmente quiero sumar los valores de NumberFTrades a 1000. Sin perder también las otras columnas.

y usando $("#calendar").fullCalendar( 'clientEvents' [, idOrFilter ] ) -> Array 0 crea un frama de datos de forma 1xlen (columna de NumberFTrades) mientras deseo un 6xn

También he intentado usar $("#calendar").fullCalendar( 'clientEvents' [, idOrFilter ] ) -> Array 11111 Tratando de sumar valores de hasta 1000 para 'NumberFTrades', pero la forma permanece constante a medida que ajusta el valor de 10 - & gt; 10000

Original en ingles

I would like to group rows in a dataframe by values of one column. The example given below would be if i were grouping the values of 'NumberOfTrades' by values of 150, so the top 2 rows are grouped and the bottom 3 rows are grouped. The next step, which I understand will require some further steps is to compute Open from the first of each group, Close from the last of each group, High from the largest of each group and Low from the smallest of each group.

Time     Open   High  Low  Close  NumberOfTrades 17:35     101.1   102  100  101         75 18:42     101     105  101  103         75 18:56     103     108  102  107         50 19:45     107     105  101  103         50 20:01     103     104  101  102         50 
Time    Open    High  Low  Close  NumberOfTrades 17:35    101.1   105  100  103         150 18:56    103     108  101  102         150 

Using df = df.groupby('Time')['NumberOfTrades'].sum(freq=1000).to_frame() just creates a new dataframe with column Time and NumberOfTrades, and I assume by grouping each 1000 rows. Whilst I actually want to sum the values of NumberOfTrades to 1000. Without also losing the other columns.

and using df = df.groupby(['Time', 'Open', 'High' 'Low', 'Close'])['NumberOfTrades'].sum(freq=1000).to_frame() creates a dataframe of shape 1xlen(column of NumberOfTrades) whilst I desire a 6xN

I have also tried using df = df.groupby('Time')['NumberOfTrades'].sum(value=1000).to_frame() trying to sum values up to 1000 for 'NumberOfTrades', but the shape remains constant as I adjust value from 10 -> 10000

</div
           

Lista de respuestas

0
 
vote

Puedes probar esto:

  df['grp'] = (df['NumberOfTrades'].cumsum() % 150).diff().fillna(0).lt(0)[::-1].cumsum()  dd = {'Time':'first',       'Open':'first',       'High':'max',       'Low':'min',       'Close':'last',       'NumberOfTrades':'sum'}  df.groupby('grp', sort=False)[['Time','Open','High','Low','Close','NumberOfTrades']]   .agg(dd).reset_index(drop=True)   

Salida:

      Time   Open  High  Low  Close  NumberOfTrades 0  17:35  101.1   105  100    103             150 1  18:56  103.0   108  101    102             150   
 

You can try this:

df['grp'] = (df['NumberOfTrades'].cumsum() % 150).diff().fillna(0).lt(0)[::-1].cumsum()  dd = {'Time':'first',       'Open':'first',       'High':'max',       'Low':'min',       'Close':'last',       'NumberOfTrades':'sum'}  df.groupby('grp', sort=False)[['Time','Open','High','Low','Close','NumberOfTrades']]   .agg(dd).reset_index(drop=True) 

Output:

    Time   Open  High  Low  Close  NumberOfTrades 0  17:35  101.1   105  100    103             150 1  18:56  103.0   108  101    102             150 
</div
 
 
         
         
0
 
vote

Reemplazo .eq(0) en lugar de .diff().fillna(0).lt(0) en la solución de Boston.

  dd = {'Time':'first',       'Open':'first',       'High':'max',       'Low':'min',       'Close':'last',       'NumberOfTrades':'sum'}  df['grp'] = (df['NumberOfTrades'].cumsum() % 150).eq(0)[::-1].cumsum() df.groupby(by='grp', sort=False)[['Time','Open','High','Low','Close','NumberOfTrades']].agg(dd).reset_index(drop=True)   
 

Replacing .eq(0) instead of .diff().fillna(0).lt(0) in @Scott Boston's solution.

dd = {'Time':'first',       'Open':'first',       'High':'max',       'Low':'min',       'Close':'last',       'NumberOfTrades':'sum'}  df['grp'] = (df['NumberOfTrades'].cumsum() % 150).eq(0)[::-1].cumsum() df.groupby(by='grp', sort=False)[['Time','Open','High','Low','Close','NumberOfTrades']].agg(dd).reset_index(drop=True) 
</div
 
 
     
     

Relacionados problema

0  Pandas Groupby AGG aplica una función con múltiples parámetros  ( Pandas groupby agg apply a function with multiple parameters ) 
Cómo se puede aplicar una función en un Groupby Pandas que requiere parámetros de varias columnas del DataFrame Groupby y devuelve dos valores de escalador. ...

1  Añadiendo filas para el año faltante por grupo en Pandas  ( Adding rows for missing year by group in pandas ) 
Tengo un marco de datos que se parece a esto pd.DataFrame({'A': ['C1', 'C1', 'C1', 'C1', 'C2', 'C2', 'C3', 'C3'], ...: 'date': [date(...

1  PD.Groupby en otro Groupby, transponiendo resultados de PD.CUT  ( Pd groupby on another groupby transposing results of pd cut ) 
Otra pregunta bastante complicada que estoy atascada con respecto a los pandas y su función grupal y cortada. La situación es la siguiente, digamos que tengo ...

0  ¿Hay alguna manera de tener un grupo de devolución de datos por semana?  ( Is there a way to have a dataframe return groupings per week ) 
Tengo un proceso de datos que tiene información presentada como la tabla a continuación, la fecha es mi índice: date | Company | Industry | Focus 2...

0  La forma más eficiente de las actividades de conteo de múltiples gemieras en grandes conjuntos de datos  ( Most efficient way of multi groupby count activities on large datasets ) 
Estoy tratando de encontrar subconjuntos (de cualquier longitud) de valores de atributo (columna), que son únicos en un conjunto de datos dado. La forma más e...

0  Cómo usar Groupby a un gran valor similar  ( How to use groupby to group similar value ) 
Tengo el siguiente fragmento import pdfplumber, requests from io import BytesIO import pandas as pd def get_title_liked_txt(page: object): df = pd.Dat...

-1  ¿Cómo uso Groupby sin hacer otros valores en la columna Nan?  ( How do i use groupby without making other values in the column nan ) 
Estoy tratando de obtener el valor más bajo de la "Fecha de inicio de la asignación" de la columna, según el "Empleado No" y el "Nombre del grupo de cliente" ...

-1  Tiempo de fila Diferencias Cálculo y concatenación por elemento mutuo en columna  ( Row time differences calculation and concatenation by mutual element in column ) 
MI DF se ve lo siguiente: action value created_by created ADD A Steven 10/2/20 6:46 AM ADD B Steven 13/2/2020 6:55...

1  ¿Puedes usar Pandas Groupby para agrupar filas, determinado sumando un valor de columna?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
Me gustaría agrupar filas en un contexto de datos por valores de una columna. El ejemplo dado a continuación sería si estuviera agrupando los valores de 'Numb...

0  Encuentra el valor más frecuente de cada 16 filas en Python  ( Find the most frequent value of every 16 rows in python ) 
Tengo un marco de datos que describe la altura de 800 personas, y quiero encontrar la altura más frecuente de cada 16 personas. Sé que puedo usar este siguien...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos