Sử dụng dữ liệu mẫu:Python Pandas có điều kiện tiền
df = pd.DataFrame({'key1' : ['a','a','b','b','a'],
'key2' : ['one', 'two', 'one', 'two', 'one'],
'data1' : np.random.randn(5),
'data2' : np. random.randn(5)})
df
data1 data2 key1 key2
0 0.361601 0.375297 a one
1 0.069889 0.809772 a two
2 1.468194 0.272929 b one
3 -1.138458 0.865060 b two
4 -0.268210 1.250340 a one
Tôi đang cố gắng tìm ra cách để nhóm dữ liệu bằng key1 và tổng chỉ các giá trị data1 nơi khóa2 bằng ' một'.
Đây là những gì tôi đã cố gắng
def f(d,a,b):
d.ix[d[a] == b, 'data1'].sum()
df.groupby(['key1']).apply(f, a = 'key2', b = 'one').reset_index()
Nhưng điều này mang lại cho tôi một dataframe với 'Không' đánh giá cao
index key1 0
0 a None
1 b None
Bất kỳ ý tưởng ở đây? Tôi đang tìm kiếm tương đương Pandas của SQL sau:
SELECT Key1, SUM(CASE WHEN Key2 = 'one' then data1 else 0 end)
FROM df
GROUP BY key1
FYI - Tôi đã nhìn thấy conditional sums for pandas aggregate nhưng không thể thay đổi câu trả lời cung cấp đó để làm việc với khoản tiền hơn là số lượng.
Cảm ơn trước
Awesome! Tôi đang cố gắng này trên dữ liệu thực tế của tôi (có thể mất một thời gian) nhưng tôi nghĩ rằng đây là những gì tôi đang tìm kiếm. Cảm ơn rất nhiều – AllenQ
Tôi nghĩ bạn có thể sử dụng bộ lọc nhóm mới ở đây ... – Jeff
Chỉ cần tìm kiếm tài liệu và tìm kiếm nhanh trên google ... không thể tìm thấy chính xác những gì bạn đang đề cập đến bởi bộ lọc nhóm ... có thể bạn chỉ cho tôi đi đúng hướng? – AllenQ