Knowledge is the Only Good
  • About

Code Snippets

programming
Python
Author

Stephen J. Mildenhall

Published

2024-02-07

Code Snippets

hex string to int

int('000000007fff4070', base=16)

Matplotlib

List all fonts

def all_fonts():
    return set([f.name for f in mpl.font_manager.fontManager.ttflist])

Three-dimensional surface plot

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LightSource

fig = plt.figure()
ax = fig.gca(projection='3d')

# Test data: Matlab `peaks()`
x, y = np.mgrid[-3:3:150j,-3:3:150j]
z =  3*(1 - x)**2 * np.exp(-x**2 - (y + 1)**2) \
   - 10*(x/5 - x**3 - y**5)*np.exp(-x**2 - y**2) \
   - 1./3*np.exp(-(x + 1)**2 - y**2)

# create light source object.
ls = LightSource(azdeg=0, altdeg=65)
# shade data, creating an rgb array.
rgb = ls.shade(z, plt.cm.RdYlBu)
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, linewidth=0,
                       antialiased=False, facecolors=rgb)

Pandas

apply expanding output

Use `result_type` argument to `apply`.

result_type : {'expand', 'reduce', 'broadcast', None}, default None
   These only act when ``axis=1`` (columns):

   * 'expand' : list-like results will be turned into columns.
   * 'reduce' : returns a Series if possible rather than expanding
     list-like results. This is the opposite of 'expand'.
   * 'broadcast' : results will be broadcast to the original shape
     of the DataFrame, the original index and columns will be
     retained.

   The default behaviour (None) depends on the return value of the
   applied function: list-like results will be returned as a Series
   of those. However if the apply function returns a Series these
   are expanded to columns.

Named functions and columns in agg

df = test_df()
df['D'] = np.random.choice(list('ABCDE'), len(df))
# name=(col, func)
df.groupby('D').agg(min_A=('A', np.min), one=('B', lambda x : 1))

# col: ((name, func), ...)
df.groupby('D').agg({'A':[['AMean', np.mean], ['ASum', np.sum]],
                     'B':[['BMean', np.mean], ['BMin', np.min]]})

You an also do this:


import pandas as pd

# Sample data
data = {
    'payee': ['Payee1', 'Payee1', 'Payee2', 'Payee2', 'Payee3', 'Payee2'],
    'account': ['Account1', 'Account1', 'Account2', 'Account3', 'Account1', 'Account2']
}
df = pd.DataFrame(data)

# Group by 'payee', then aggregate
result = df.groupby('payee')['account'].agg(
    Occurrences='count',
    ModeAccount=lambda x: x.mode()[0],
    ModeCount=lambda x: (x == x.mode()[0]).sum()
).reset_index()

print(result)

WSL

  • Access WSL files from Windows: \\wsl$
  • Access Windows files from WSL: /mnt/c/
  • Usually looking for \\wsl$\Ubuntu\home\steve\.ipython\profile_default\startup

Stephen J. Mildenhall. License: CC BY-SA 2.0.

 

Website made with Quarto