2017-09-24 106 views
0

我有兩列_Id和_ParentId與此示例數據。使用這個我想用_ParentId將_Id分組。熊貓:在兩個不同的列中獲取具有相同值對的兩個不同行

 _Id _ParentId 
     1  NaN 
     2  NaN 
     3  1.0 
     4  2.0 
     5  NaN 
     6  2.0 

分組結果應顯示如下。

 _Id _ParentId 
     1  NaN 
     3  1.0 
     2  NaN 
     4  2.0 
     6  2.0 
     5  NaN 

這樣做的主要目的是,其_id屬於哪個_ParentId(例如_id 3屬於_id 1)基團。

我試圖使用groupby和重複,但我似乎無法得到上面顯示的結果。

回答

2

使用sort_valuestemp

In [3188]: (df.assign(temp=df._ParentId.combine_first(df._Id)) 
       .sort_values(by='temp').drop('temp', 1)) 
Out[3188]: 
    _Id _ParentId 
0 1  NaN 
2 3  1.0 
1 2  NaN 
3 4  2.0 
5 6  2.0 
4 5  NaN 

詳細

In [3189]: df._ParentId.combine_first(df._Id) 
Out[3189]: 
0 1.0 
1 2.0 
2 1.0 
3 2.0 
4 5.0 
5 2.0 
Name: _ParentId, dtype: float64 

In [3190]: df.assign(temp=df._ParentId.combine_first(df._Id)) 
Out[3190]: 
    _Id _ParentId temp 
0 1  NaN 1.0 
1 2  NaN 2.0 
2 3  1.0 1.0 
3 4  2.0 2.0 
4 5  NaN 5.0 
5 6  2.0 2.0 
+0

我想你是正確的!你爲自己贏得了一個心靈讀者徽章。 – piRSquared

+0

這完美的作品。在將值排序之前,我從未想過將它們合併爲預處理。謝謝! – WhiteSolstice

1

你的預期輸出是完全一樣的輸入,只是ID 4和6在一起,NaN的是,在不同的地方。它不可能有預期的產量。

這裏是如何組通過將理想工作:

print("Original: ") 
print(df) 

df = df.fillna(-1) # if not replaced with another character , the grouping won't show NaNs. 
df2 = df.groupby('_Parent') 

print("\nAfter grouping: ") 
for key, item in df2: 
    print (df2.get_group(key)) 

輸出:

Original: 
    _Id _Parent 
0 1  NaN 
1 2  NaN 
2 3  1.0 
3 4  2.0 
4 5  NaN 
5 6  2.0 

After grouping: 
    _Id _Parent 
0 1  0.0 
1 2  0.0 
4 5  0.0 
    _Id _Parent 
2 3  1.0 
    _Id _Parent 
3 4  2.0 
5 6  2.0 
相關問題