2017-06-29 3 views
0

私はこのようになりますDATAFRAME dfを持っています。私はランダムにDataFrameを分割したい。たとえば、DataFrame df1に3つの一意の値を、DataFrameに2つの一意の値df2が必要です。私の問題は、彼らが一意ではないということです。私はこれらのユニークな値を2つのDataFramesに分割したくありません。スプリットDATAFRAMEランダム(一意の値に依存しては)

だから、結果としてデータフレームは、次のようになります。2つの固有の値を持つ

| A | B | ... | 
--------------------- 
| one | ... | ... | 
| one | ... | ... | 
| one | ... | ... | 
| three | ... | ... | 
| three | ... | ... | 
| five | ... | ... | 
| five | ... | ... | 

DATAFRAME df2

| A | B | ... | 
--------------------- 
| two | ... | ... | 
| four | ... | ... | 

がとにかくどのようにあるの

DATAFRAME 3つの一意の値を持つdf1これは簡単に達成できますか?私はグループ化について考えたが、私は、インデックス望ましい結果を得るために.isin()メソッドを使用して、データフレーム、最後に

+1

あなたは、リストにユニークなA因子を抽出し、その後2つのリストにこのリストを分割して、あなたを選択する必要があります2つのリストに基づくデータフレーム。 –

答えて

1

セットアップ

df=pd.DataFrame({'A': {0: 'one', 
    1: 'one', 
    2: 'one', 
    3: 'two', 
    4: 'three', 
    5: 'three', 
    6: 'four', 
    7: 'five', 
    8: 'five'}, 
'B': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8}}) 

ソリューション

#get 2 unique keys from column A for df1. You can control the split either 
# by absolute number in each group, or by a percentage. Check docs for the .sample() func. 
df1_keys = df.A.drop_duplicates().sample(2) 
df1 = df[df.A.isin(df1_keys)] 
#anything not in df1_keys will be assigned to df2 
df2 = df[~df.A.isin(df1_keys)] 

df1_keys 
Out[294]: 
7 five 
0  one 
Name: A, dtype: object 

df1 
Out[295]: 
     A B 
0 one 0 
1 one 1 
2 one 2 
7 five 7 
8 five 8 

df2 
Out[296]: 
     A B 
3 two 3 
4 three 4 
5 three 5 
6 four 6 
1
v = df1['A'].unique() # Get the unique values 
np.shuffle(v) # Shuffle them 
v1,v2 = np.array_split(v,2) # Split the unique values into two arrays 

...この上から分割するかどうかはわかりません。

r1 = df[df['A'].isin(v1)] 
r2 = df[df['A'].isin(v2)] 
関連する問題