我不想要合併/連接列或用其他值替換某些值(儘管...也許是?)。但我有一個大的數據框(> 100行和列),我想提取「幾乎相同」的列,即有> 2個值(在同一個索引處)共同的,而在其他索引處沒有不同的值如果在一列中有值,則必須有相同的值或另一列中的NaN)。 下面是這樣一個數據幀的例子:有沒有辦法獲得幾列熊貓DataFrame的「聯盟」?
a = np.random.randint(1,10,10)
b = np.array([np.nan,2,np.nan,3,np.nan,6,8,1,2,np.nan])
c = np.random.randint(1,10,10)
d = np.array([7,2,np.nan,np.nan,np.nan,6,8,np.nan,2,2])
e = np.array([np.nan,2,np.nan,np.nan,np.nan,6,8,np.nan,np.nan,2])
f = np.array([np.nan,2,np.nan,3.0,7,np.nan,8,np.nan,np.nan,2])
df = pd.DataFrame({'A':a,'B':b,'C':c,'D':d,'E':e, 'F':f})
df.ix[3:6,'A']=np.nan
df.ix[4:8,'C']=np.nan
EDIT
keys=['S01_o4584','S02_o2531','S03_o7812','S03_o1122','S04_o5210','S04_o3212','S05_o4665','S06_o7425','S07_o3689','S08_o2371']
df['index']=keys
df = df.set_index('index')
A B C D E F
index
S01_o4584 8.0 NaN 9.0 7.0 NaN NaN
S02_o2531 8.0 2.0 5.0 2.0 2.0 2.0
S03_o7812 1.0 NaN 5.0 NaN NaN NaN
S03_o1122 NaN 3.0 6.0 NaN NaN 3.0
S04_o5210 NaN NaN NaN NaN NaN 7.0
S04_o3212 NaN 6.0 NaN 6.0 6.0 NaN
S05_o4665 NaN 8.0 NaN 8.0 8.0 8.0
S06_o7425 1.0 1.0 NaN NaN NaN NaN
S07_o3689 8.0 2.0 NaN 2.0 NaN NaN
S08_o2371 3.0 NaN 9.0 2.0 2.0 2.0
正如所看到的,列B,d (和新E)位置處具有相同的值(索引) S02_o2531,S04_o3212,S05_o4665和S08_o2371,而在其他位置,一個有一個值,而另一個有NaN。
我所需的輸出是:
index BD*E*
S01_o4584 7
S02_o2531 2
S03_o7812 NaN
S03_o1122 3
S04_o5210 NaN
S04_o3212 6
S05_o4665 8
S06_o7425 1
S07_o3689 2
S08_o2371 2
但是,我不能合併列,那麼這將有兩個不同的值,該指數的年初一樣:你可以看到,F列也全體的索引,但新的索引位於S04_o5210,但之前的組合列已在「S04_」(索引S04_o3212)處具有值。
是否有合理的pythonic方式來做到這一點?即1)根據條件中的值必須是相同的或np.nan而不是不同的條件來查找列。 2)設置一個條件,即一個列不能合併,如果它具有與先前包含的值相同的索引開始(我可能需要將該字符串拆分爲兩列並執行multiindex ???)3)將它們合併成新的系列/數據幀。
啊,先前的答案被刪除(與我的評論一起):(所以再次:我想知道之前的那一步,即如何找出它是我想要的B和D列(搜索與np.nan具有相同或值的列 - 如果在同一個索引處有不同的值,我不希望這樣)。謝謝。我將在問題中編輯它以使它更清晰 – durbachit