簡體   English   中英

如何從熊貓DataFrame划分兩行並將結果存儲在第二個DataFrame中?

[英]How do I divide two rows from a pandas DataFrame and store the result in a second DataFrame?

我想從第一個DataFrame划分兩行,並將結果存儲在第二個DataFrame 我已經基於這個問題進行了嘗試,但是到目前為止,運氣還不錯。

第一個DataFrame中的行索引是格式(str, int) tuples ,我要計算的比率(將成為第二個DataFrame的索引)表示為tupletuples ,並存儲在list

(gene, position)
((gene, position1), (gene, position2))

我的到目前為止是我的代碼:

df1 = pd.DataFrame(data={'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9], 'D' [10,11,12]}, 
                   index=[('geneA', 1538), ('geneA', 1591), ('geneA', 1687)])

               A  B  C   D
(geneA, 1538)  1  4  7  10
(geneA, 1591)  2  5  8  11
(geneA, 1687)  3  6  9  12

pairs = [(('geneA', 1538), ('geneA', 1591))]

df2 = pd.DataFrame()
for pair in pairs:
    df2.loc[[pair]] = df1.loc[[pair[0]]] / df1.loc[[pair[1]]]

當我運行此代碼時,出現ValueError

ValueError: Buffer has wrong number of dimensions (expected 1, got 3)

我上面鏈接的上一個示例在進行除法的行中沒有嵌套的括號,但是當我刪除括號時,得到了與索引相關的KeyErrors 我懷疑這與我使用tuples和嵌套tuples作為indices 任何幫助將不勝感激,我花了整個下午的時間來解決這個問題。

pandas tuples for a MultiIndex使用tuples for a請參閱docs ):

MultiIndex對象是標准Index對象的層次結構類似物,該對象通常將軸標簽存儲在pandas對象中。 您可以將MultiIndex一個元組數組,其中每個元組都是唯一的。 MultiIndex可以從陣列(使用的列表來創建MultiIndex.from_arrays ),元組(使用的陣列MultiIndex.from_tuples ),或者一個交叉組iterables(使用的MultiIndex.from_product )。

因此,首先定義MultiIndex可能是最合適的。

df1 = pd.DataFrame(data={'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9], 'D': [10,11,12]}, index=pd.MultiIndex.from_tuples([('geneA', 1538), ('geneA', 1591), ('geneA', 1687)]))

            A  B  C   D
geneA 1538  1  4  7  10
      1591  2  5  8  11
      1687  3  6  9  12

像這樣定義,該划分工作正常:

pairs = [(('geneA', 1538), ('geneA', 1591))]
df2 = pd.DataFrame()
for pair in pairs:
    df2[pair] = df1.loc[pair[0]].div(df1.loc[pair[1]])

df2.T

                                  A    B      C         D
((geneA, 1538), (geneA, 1591))  0.5  0.8  0.875  0.909091

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM