Muestra de datos de entrada: 101.csv (tengo archivos similares para diferentes ID, es decir, 102.csv, 209.csv, etc.)
ID A B
101 1561.5 4.117647059
101 1757 4.705882353
101 1812 7.692307692
101 2020.5 8.333333333
101 1569 5.833333333
101 1958.5 7
101 1657.5 6
101 823.5 7.142857143
101 1938.5 3.529411765
101 2123 4.705882353
101 747.5 4.761904762
101 1895 8.333333333
101 1806.5 6.111111111
101 1702 8.461538462
101 1332 7.142857143
101 1740.5 4.117647059
101 1832 6.25
101 1966.5 6.111111111
Hice un cubo y calculé la media con el siguiente código, lo que quiero hacer ahora es agregar una columna con ID, cada cubo debe estar en una columna diferente en el encabezado, tengo varios archivos csv, cada archivo contiene una ID diferente. Quiero que mi archivo de salida contenga el resultado para cada ID, es decir, todos los archivos csv en la carpeta.
bins = [650,1000,1350,1700,2050,2400,2750,3000]
a_bins = df.B.groupby(pd.cut(df['A'],bins))
a_bins = a_bins.agg([np.mean])
Resultado que estoy obteniendo actualmente para cada identificación
A B
650-1000 7.647691597
1000-1350 7.55428538
1350-1700 8.420818076
1700-2050 7.105554845
2050-2400 5.29774235
2400-2750 6.442554031
2750-3100 5.397752428
Lo que necesito es
ID 650-1000 1000-1350 1350-1700 1700-2050 2050-2400 2400-2750 2750-3100
101 7.6476916 7.5542854 8.4208181 7.1055548 5.2977424 6.4425540 5.3977524
102 7.6576916 6.4425540 8.4508181 7.1155548 7.5542854 6.4725540 5.4077524
209 7.6876916 8.4208181 7.5542854 5.3977524 7.5542854 5.2977424 7.5542854
2 respuestas
from pathlib import Path
files = Path(".").glob("1*.csv")
my_df_list = []
bins = [650,1000,1350,1700,2050,2400,2750,3000]
columns = ("650-1000","1000-1350","1350-1700","1700-2050","2050-2400","2400-2750","2750-3000")
for file in files:
file_name = file.name
file_id = file_name.replace("*.csv","")
df = pd.read_csv(file_name)
print(df.columns)
bins = [650,1000,1350,1700,2050,2400,2750,3000]
a_bins = df.B.groupby(pd.cut(df['A'],bins))
a_bins = a_bins.agg([np.mean]).reset_index(drop=True)
a_bins_df = a_bins.T.copy()
a_bins_df.columns = columns
a_bins_df.index = [file_id]
my_df_list.append(a_bins_df)
df_total = pd.concat(my_df_list,axis=0)
Suponiendo que todos los archivos .csv estén en el mismo directorio, a continuación se mostrará el resultado, he copiado 1.csv como 2.csv para probar el script anterior
650-1000 1000-1350 1350-1700 1700-2050 2050-2400 2400-2750 2750-3000
102 5.952381 7.142857 5.316993 6.422334 4.705882 NaN NaN
101 5.952381 7.142857 5.316993 6.422334 4.705882 NaN NaN
Creo que quieres
bins = [650,1000,1350,1700,2050,2400,2750,3000]
a_bins = df.groupby([pd.cut(df['A'],bins), 'ID']).B
a_bins.agg('mean').reset_index().pivot(index='ID', columns='A', values='B')
Así obtendrás:
A (650, 1000] (1000, 1350] ... (2400, 2750] (2750, 3000]
ID ...
101 5.952381 7.142857 ... NaN NaN
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.