Python 具有变量组合(或排列)并分配给数据帧的函数值
我有Python 具有变量组合(或排列)并分配给数据帧的函数值,python,pandas,dataframe,Python,Pandas,Dataframe,我有n变量。在这种情况下,假设n等于3。我想将一个函数应用于变量的所有组合(或排列,取决于您希望如何解决这个问题),并将结果存储在dataframe中的同一行和同一列中 a = 1 b = 2 c = 3 indexes = ['a', 'b', 'c'] df = pd.DataFrame({x:np.nan for x in indexes}, index=indexes) s = pd.Series({"a": 1, "b": 2, "c
n
变量。在这种情况下,假设n
等于3。我想将一个函数应用于变量的所有组合(或排列,取决于您希望如何解决这个问题),并将结果存储在dataframe中的同一行和同一列中
a = 1
b = 2
c = 3
indexes = ['a', 'b', 'c']
df = pd.DataFrame({x:np.nan for x in indexes}, index=indexes)
s = pd.Series({"a": 1, "b": 2, "c": 3})
s.apply(lambda x: x+s)
如果我应用sum(函数可以是任何函数),那么我想要得到的结果如下:
a b c
a 2 3 4
b 3 4 5
c 4 5 6
我只能考虑迭代所有变量,逐个应用函数,并使用迭代器的索引来设置dataframe中的值。有更好的解决方案吗?如果性能很重要,我相信您需要从变量创建的数组的广播总和:
a = 1
b = 2
c = 3
indexes = ['a', 'b', 'c']
arr = np.array([a,b,c])
df = pd.DataFrame(arr + arr[:, None], index=indexes, columns=indexes)
print (df)
a b c
a 2 3 4
b 3 4 5
c 4 5 6
为此,可以使用apply并返回一个
pd.Series
。在这种情况下,pandas
使用系列索引作为结果数据帧中的列
a = 1
b = 2
c = 3
indexes = ['a', 'b', 'c']
df = pd.DataFrame({x:np.nan for x in indexes}, index=indexes)
s = pd.Series({"a": 1, "b": 2, "c": 3})
s.apply(lambda x: x+s)
请注意,您所做的操作是在一个元素和一个系列之间进行的。如果变量的值是iterable的,并且函数将从其中的两个变量中生成一个值,那么如何实现我需要的结果?
a,b,c=(1,2),(2,3),(3,4)
并且函数是scipy stats的Pearson Correlations,导出到具有列[“a”、“b”、“c”]
的数据框
,然后运行df.corr()
?一般来说,直接向量计算比应用更快。如果变量的值是可计算的,并且函数将从其中两个变量中产生一个值,我如何才能获得所需的结果?