我有两个numpy数组,定义网格的x和y轴.例如:
x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)
我想生成这些数组的笛卡尔积来生成:
array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)
在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product并返回到numpy数组并不是最有效的形式.
给定以下数据框:
import pandas as pd
import numpy as np
a = np.arange(16).reshape(4, 4)
df = pd.DataFrame(data=a, columns=['a','b','c','d'])
Run Code Online (Sandbox Code Playgroud)
我想产生以下结果:
df([[ NaN, 1, 2, 3],
[ NaN, NaN, 6, 7],
[ NaN, NaN, NaN, 11],
[ NaN, NaN, NaN, NaN]])
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试使用np.tril_indicies,但是它仅适用于将df转换为numpy数组的情况,并且仅适用于整数分配(不适用于np.nan):
il1 = np.tril_indices(4)
a[il1] = 0
Run Code Online (Sandbox Code Playgroud)
给出:
array([[ 0, 1, 2, 3],
[ 0, 0, 6, 7],
[ 0, 0, 0, 11],
[ 0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
...这几乎是我在寻找的东西,但是在分配NaN时bar之以鼻:
ValueError: cannot convert float NaN to integer
Run Code Online (Sandbox Code Playgroud)
而:
df[il1] = 0 …Run Code Online (Sandbox Code Playgroud)