<jupyter_start><jupyter_text>Programación 201 Librerías científicas en Python: `Pandas`------------------------------------------------------  Ejercicio 1Cargad los datos del fichero _got.csv_ en un _dataframe_. Este conjunto de datos recoge información de la [Guerra de los Cinco Reyes](https://awoiaf.westeros.org/index.php/War_of_the_Five_Kings) de las novelas de [Cancion de Hielo y Fuego](https://es.wikipedia.org/wiki/Canci%C3%B3n_de_hielo_y_fuego) de <NAME>.Mostrad el número de filas del _dataframe_ y las etiquetas de los ejes.<jupyter_code>import numpy as np
import pandas as pd
df = pd.read_csv('/content/got.csv')
filas = df.shape[0]
df.shape
df.columns
df.head()<jupyter_output><empty_output><jupyter_text>Ejercicio 2Agrupad los datos cargados en el ejercicio 1 por el principal bando atacante (*attacker\_1*). Para cada posición, mostrad el número de batallas y el resultado de la batalla (el resultado se encuentra en el campo *attacker\_outcome*).<jupyter_code>df_agrupado = df.groupby(['attacker_1','attacker_outcome']).count().iloc[:,2]
df_agrupado<jupyter_output><empty_output><jupyter_text>Ejercicio 3Mostrad los datos de las batallas donde el numero de participantes supera los 15000 "hombres" (contando ambos bandos: *attacker\_size* y *defender\_size*), el resultado haya sido favorable para el atacante, y la batalla se haya producido en invierno (_summer=0_).<jupyter_code>df[(df['attacker_size']+df['defender_size']>15000) & (df['attacker_outcome']=='win') & (df['summer'] == 0.0)]
#df['attacker_size'] = df['attacker_size'].fillna(0)
#df['defender_size'] = df['defender_size'].fillna(0)
#DUDA: ¿Podría reemplazar en una sola instrucción todos los nulos de ambas columnas?

df['attacker_size'] = df['attacker_size'].replace(np.nan, 0)
df['defender_size'] = df['defender_size'].replace(np.nan, 0)
df[(df['attacker_size']+df['defender_size']>15000) & (df['attacker_outcome']=='win') & (df['summer'] == 0.0)]<jupyter_output><empty_output><jupyter_text>Ejercicio 4Contad el número de lugares que aparecen más de una vez en _dataframe_ (campo _location_), utilizando las funciones de la librería _pandas_. ¿Existe algún lugar donde se haya realizado más de una batalla? Comprobad qué bandos estaban implicados.<jupyter_code>#df_agrupado = df.groupby(['location']).count().iloc[:,2:13]
#df_agrupado = df.groupby(['location']).count().iloc[:,2:13]
df_agrupado_location = df.groupby(['location']).count().iloc[:,2]
sr = df_agrupado_location[(df_agrupado_location[:]>1)]
print(sr)
indexes = sr.index
columnas =['location','attacker_king', 'defender_king',
       'attacker_1', 'attacker_2', 'attacker_3', 'attacker_4', 'defender_1',
       'defender_2', 'defender_3', 'defender_4']
df[columnas].loc[df.location.isin(indexes)].iloc[:].sort_values('location')<jupyter_output>location
Darry               2
Deepwood Motte      2
Harrenhal           2
Moat Cailin         2
Riverrun            3
Storm's End         2
Torrhen's Square    2
Winterfell          3
Name: battle_number, dtype: int64<jupyter_text>Ejercicio 5Añadid una nueva columna al _dataframe_ con un valor booleano indicando una predicción básica de si en una cierta batalla el bando atacante será vencedor. Definiremos el valor como _True_ sí el bando atacante es mayor al defensor, y como _False_ en caso contrario. Definid como _NaN_ aquellos casos en los que no haya número de tropas en ningún bando. ¿En que casos, identificados por el número de batalla (*battle\_number*), nuestra predicción coincide con el resultado real?<jupyter_code>df_prediccion = df.assign(prediccion=lambda x: x.attacker_size > x.defender_size)
df_prediccion.loc[(df_prediccion['attacker_size'] == 0) & (df_prediccion['defender_size'] == 0), 'prediccion'] = 'NaN'


#DUDA: Intento hacer un lambda condicional pero me da error:
#df_prediccion = df.assign(prediccion=lambda x: x.attacker_size > x.defender_size if x.attacker_size != 0 & x.defender_size!=0 else 'NaN')
df_prediccion<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13177122700932226, 'fraction_numerical': 0.017384731670445956, 'mean_word_length': 5.5403624382207575, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 26, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '255089', 'license': 'Apache-2.0', 'n_tokens_mistral': 1461, 'n_tokens_neox': 1425, 'n_words': 366, 'path': '02_DataAnalysis/practices/your-code/pra03_pandas-Cris.ipynb', 'repo_name': 'critacre/The_Bridge_School_DataScience_PT', 'size': '3980'}