Ich habe derzeit einen Pandas Dataframe, in dem ich Vergleiche zwischen Spalten durchführen. Ich habe einen Fall gefunden, in dem es leere Spalten gibt, wenn ein Vergleich stattfindet, ein Vergleich aus irgendeinem Grund liefert sonst Wert. Ich habe eine zusätzliche Anweisung hinzugefügt, um es zu leeren. Schauen, um zu sehen, ob ich das vereinfachen kann und eine einzelne Aussage habe.Pandas Verbesserung
df['doc_type'].loc[(df['a_id'].isnull() & df['b_id'].isnull())] = ''
-Code
df = pd.DataFrame({
'a_id': ['A', 'B', 'C', 'D', '', 'F', ''],
'a_score': [1, 2, 3, 4, '', 6, ''],
'b_id': ['a', 'b', 'c', 'd', 'e', 'f', ''],
'b_score': [0.1, 0.2, 3.1, 4.1, 5, 5.99, ''],
})
print df
# Replace empty string with NaN
df = df.apply(lambda x: x.str.strip() if isinstance(x, str) else x).replace('', np.nan)
# Calculate higher score
df['doc_id'] = df.apply(lambda df: df['a_id'] if df['a_score'] >= df['b_score'] else df['b_id'], axis=1)
# Select type based on higher score
df['doc_type'] = df.apply(lambda df: 'a' if df['a_score'] >= df['b_score'] else 'b', axis=1)
print df
# Update type when is empty
df['doc_type'].loc[(df['a_id'].isnull() & df['b_id'].isnull())] = ''
print df