假設我在熊貓系列A和系列B中有兩個系列。如何創建一個數據幀,其中所有這些值都相乘在一起,即系列A在左邊手邊和系列B沿着頂部。基本上是相同的概念,因爲這,其中系列A將是對左和B系列沿頂部的黃色的黃色,和所有的值之間將通過乘法來填充:通過將兩個序列相乘來在熊貓中創建一個數據幀
對不起,應該可能補充說我的兩個系列的長度不一樣。我現在遇到'矩陣不對齊'的錯誤,所以我認爲這是問題所在。
假設我在熊貓系列A和系列B中有兩個系列。如何創建一個數據幀,其中所有這些值都相乘在一起,即系列A在左邊手邊和系列B沿着頂部。基本上是相同的概念,因爲這,其中系列A將是對左和B系列沿頂部的黃色的黃色,和所有的值之間將通過乘法來填充:通過將兩個序列相乘來在熊貓中創建一個數據幀
對不起,應該可能補充說我的兩個系列的長度不一樣。我現在遇到'矩陣不對齊'的錯誤,所以我認爲這是問題所在。
可以使用矩陣乘法點,但你必須之前系列轉換成數據幀(因爲dot method on Series implements dot product):
>>> B = pd.Series(range(1, 5))
>>> A = pd.Series(range(1, 5))
>>> dfA = pd.DataFrame(A)
>>> dfB = pd.DataFrame(B)
>>> dfA.dot(dfB.T)
0 1 2 3
0 1 2 3 4
1 2 4 6 8
2 3 6 9 12
3 4 8 12 16
所以我覺得這可能讓你大多數的方式存在,如果你有兩個系列不同的長度。這似乎是一個非常手動的過程,但我想不出用pandas或NumPy函數的另一種方式。
>>>> a = Series([1, 3, 3, 5, 5])
>>>> b = Series([5, 10])
首先轉換您行值a
到數據幀,使這個系列的副本在新列的形式很多,你有你的列系列b
值。
>>>> result = DataFrame(a)
>>>> for i in xrange(len(b)):
result[i] = a
0 1
0 1 1
1 3 3
2 3 3
3 5 5
4 5 5
然後,您可以播放您的系列b
在你的數據幀result
:
>>>> result = result.mul(b)
0 1
0 5 10
1 15 30
2 15 30
3 25 50
4 25 50
在我選擇的例子,你將最終獲得是由於您最初的系列重複索引。我會建議將索引作爲唯一標識符。這使編程有意義,否則當您選擇一個索引分配了多個行時,您將返回多個值。如果你一定要,你就可以使用這些功能重新索引你的行標籤和您的列標籤:重複索引
>>>> result.columns = b
>>>> result.set_index(a)
5 10
1 5 10
3 15 30
3 15 30
5 25 50
5 25 50
例子:
>>>> result.loc[3]
5 10
3 15 30
3 15 30
首先創建1的的數據幀。然後依次沿着每個軸進行廣播。
>>> s1 = Series([1,2,3,4,5])
>>> s2 = Series([10,20,30])
>>> df = DataFrame(1, index=s1.index, columns=s2.index)
>>> df
0 1 2
0 1 1 1
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
>>>> df.multiply(s1, axis='index') * s2
0 1 2
0 10 20 30
1 20 40 60
2 30 60 90
3 40 80 120
4 50 100 150
您需要使用df.multiply
以指定該系列將排隊與行索引。您可以將常規乘法運算符*
與s2一起使用,因爲列上的匹配是在DataFrame和Series之間進行乘法的默認方式。
您可以通過將行(或列)的每個值與其他系列廣播來乘以兩個不等長度系列來創建DataFrame。例如:
> row = pd.Series(np.arange(1, 6), index=np.arange(1, 6))
> col = pd.Series(np.arange(1, 4), index=np.arange(1, 4))
> row.apply(lambda r: r * col)
1 2 3
1 1 2 3
2 2 4 6
3 3 6 9
4 4 8 12
5 5 10 15
您到目前爲止嘗試過什麼?您可以編輯您的問題並添加一些代碼和錯誤或結果。 – Theresa