Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有变量组合(或排列)并分配给数据帧的函数值_Python_Pandas_Dataframe - Fatal编程技术网

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()
?一般来说,直接向量计算比应用更快。如果变量的值是可计算的,并且函数将从其中两个变量中产生一个值,我如何才能获得所需的结果?