Tôi có DataFrame
với cột Sales
.Pandas chia DataFrame theo giá trị cột
Làm cách nào để chia thành 2 dựa trên giá trị Sales
?
Đầu tiên DataFrame
sẽ có dữ liệu với 'Sales' < s
và thứ hai với 'Sales' >= s
Tôi có DataFrame
với cột Sales
.Pandas chia DataFrame theo giá trị cột
Làm cách nào để chia thành 2 dựa trên giá trị Sales
?
Đầu tiên DataFrame
sẽ có dữ liệu với 'Sales' < s
và thứ hai với 'Sales' >= s
Bạn có thể sử dụng boolean indexing
:
df = pd.DataFrame({'Sales':[10,20,30,40,50], 'A':[3,4,7,6,1]})
print (df)
A Sales
0 3 10
1 4 20
2 7 30
3 6 40
4 1 50
s = 30
df1 = df[df['Sales'] >= s]
print (df1)
A Sales
2 7 30
3 6 40
4 1 50
df2 = df[df['Sales'] < s]
print (df2)
A Sales
0 3 10
1 4 20
Cũng có thể nghịch mask
bởi ~
:
mask = df['Sales'] >= s
df1 = df[mask]
df2 = df[~mask]
print (df1)
A Sales
2 7 30
3 6 40
4 1 50
print (df2)
A Sales
0 3 10
1 4 20
print (mask)
0 False
1 False
2 True
3 True
4 True
Name: Sales, dtype: bool
print (~mask)
0 True
1 True
2 False
3 False
4 False
Name: Sales, dtype: bool
Sử dụng groupby
bạn có thể chia thành hai dataframes như
In [1047]: df1, df2 = [x for _, x in df.groupby(df['Sales'] < 30)]
In [1048]: df1
Out[1048]:
A Sales
2 7 30
3 6 40
4 1 50
In [1049]: df2
Out[1049]:
A Sales
0 3 10
1 4 20
Có cách nào để làm điều đó mà không cần phải cắt các dataframe hai lần? Bởi vì theo cách này, chúng ta sẽ phải cuộn qua chỉ mục để tạo df1 và một lần khác cho cùng một điều kiện cho df2. Nhưng tôi không thể tìm ra cách để có được cả hai dataframes trong một dòng .. – ysearka
Thật không may tôi nghĩ rằng chỉ có giải pháp này - xem [cookbook] (http://pandas.pydata.org/pandas-docs/stable/cookbook .html # splitting). – jezrael