Soy muy nuevo en el marco de datos de pandas que tiene una columna de fecha y hora y una columna que contiene una cadena de texto (encabezados). Cada título será una nueva fila.
Necesito trazar la fecha en el eje x, y el eje y debe contener cuántas veces aparece un título en cada fecha.
Entonces, por ejemplo, una fecha puede contener 3 titulares.
¿Cuál es la forma más sencilla de hacer esto? No puedo entender cómo hacerlo en absoluto. ¿Quizás agregar otra columna con un '1' para cada fila? Si es así, ¿cómo harías esto?
¡Por favor apúnteme en la dirección de cualquier cosa que pueda ayudar!
¡Gracias!
Intenté trazar el recuento en la y, pero seguí obteniendo errores, intenté crear una variable que cuente el número de filas, pero que tampoco devolvió nada de uso.
Traté de agregar una columna con el recuento de titulares
df_data['headline_count'] = df_data['headlines'].count
Y probé el grupo por método
df_data['count'] = df.groupby('headlines')['headlines'].transform('count')
Cuando uso groupie, recibo un error de
KeyError: 'headlines'
La salida debería ser simplemente un gráfico con cuántas veces se repite una fecha en el marco de datos (lo que indica que hay varios encabezados) en las filas trazadas en el eje y. Y el eje x debe ser la fecha en que ocurrieron las observaciones.
3 respuestas
Prueba esto:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
A = pd.DataFrame(columns=["Date", "Headlines"], data=[["01/03/2018","Cricket"],["01/03/2018","Football"],
["02/03/2018","Football"],["01/03/2018","Football"],
["02/03/2018","Cricket"],["02/03/2018","Cricket"]] )
Sus datos se ven así:
print (A)
Date Headlines
0 01/03/2018 Cricket
1 01/03/2018 Football
2 02/03/2018 Football
3 01/03/2018 Football
4 02/03/2018 Cricket
5 02/03/2018 Cricket
Ahora haga un grupo por operación en él:
data = A.groupby(["Date","Headlines"]).size()
print(data)
Date Headlines
01/03/2018 Cricket 1
Football 2
02/03/2018 Cricket 2
Football 1
dtype: int64
Ahora puede trazarlo usando el siguiente código:
# set width of bar
barWidth = 0.25
# set height of bar
bars1 = data.loc[(data.index.get_level_values('Headlines') =="Cricket")].values
bars2 = data.loc[(data.index.get_level_values('Headlines') =="Football")].values
# Set position of bar on X axis
r1 = np.arange(len(bars1))
r2 = [x + barWidth for x in r1]
# Make the plot
plt.bar(r1, bars1, color='#7f6d5f', width=barWidth, edgecolor='white', label='Cricket')
plt.bar(r2, bars2, color='#557f2d', width=barWidth, edgecolor='white', label='Football')
# Add xticks on the middle of the group bars
plt.xlabel('group', fontweight='bold')
plt.xticks([r + barWidth for r in range(len(bars1))], data.index.get_level_values('Date').unique())
# Create legend & Show graphic
plt.legend()
plt.xlabel("Date")
plt.ylabel("Count")
plt.show()
¡Espero que esto ayude!
Utilice Series.value_counts
con la columna date
para Series
con Series.sort_index
o GroupBy.size
:
df = pd.DataFrame({'date':pd.to_datetime(['2019-10-10','2019-10-10','2019-10-09']),
'col1':['a','b','c']})
s = df['date'].value_counts().sort_index()
#alternative
#s = df.groupby('date').size()
print (s)
2019-10-09 1
2019-10-10 2
Name: date, dtype: int64
Y el último uso Series.plot
:
s.plot()
¿Has probado esto?
df2 = df_data.groupby(['headlines']).count()
Debe guardar los resultados de esto en un nuevo marco de datos (df2) y no en otra columna porque el resultado de groupby no tendrá las mismas dimensiones del marco de datos original.
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.