HỎIluận Pandas DataFrame.assign
Làm thế nào có thể assign
được sử dụng để trả về một bản sao của DataFrame ban đầu với nhiều cột mới được bổ sung?
MONG MUỐN KẾT QUẢ
df = pd.DataFrame({'A': range(1, 5), 'B': range(11, 15)})
>>> df.assign({'C': df.A.apply(lambda x: x ** 2), 'D': df.B * 2})
A B C D
0 1 11 1 22
1 2 12 4 24
2 3 13 9 26
3 4 14 16 28
ATTEMPTS
Ví dụ trên kết quả trong:
ValueError: Wrong number of items passed 2, placement implies 1
.
BỐI CẢNH
Các assign
chức năng trong Pandas có một bản sao của dataframe có liên quan tham gia vào cột mới được giao, ví dụ
df = df.assign(C=df.B * 2)
>>> df
A B C
0 1 11 22
1 2 12 24
2 3 13 26
3 4 14 28
0.19.2 documentation cho hàm này ngụ ý rằng nhiều hơn một cột có thể được thêm vào khung dữ liệu.
Chỉ định nhiều cột trong cùng một chỉ định là có thể, nhưng bạn không thể tham chiếu các cột khác được tạo trong cùng một cuộc gọi gán.
Ngoài ra:
Tham số:
kwargs: từ khóa, cặp giá trịtừ khóa là tên cột.
Các mã nguồn cho các chức năng khẳng định rằng nó chấp nhận một từ điển:
def assign(self, **kwargs):
"""
.. versionadded:: 0.16.0
Parameters
----------
kwargs : keyword, value pairs
keywords are the column names. If the values are callable, they are computed
on the DataFrame and assigned to the new columns. If the values are not callable,
(e.g. a Series, scalar, or array), they are simply assigned.
Notes
-----
Since ``kwargs`` is a dictionary, the order of your
arguments may not be preserved. The make things predicatable,
the columns are inserted in alphabetical order, at the end of
your DataFrame. Assigning multiple columns within the same
``assign`` is possible, but you cannot reference other columns
created within the same ``assign`` call.
"""
data = self.copy()
# do all calculations first...
results = {}
for k, v in kwargs.items():
if callable(v):
results[k] = v(data)
else:
results[k] = v
# ... and then assign
for k, v in sorted(results.items()):
data[k] = v
return data
Tôi nghĩ rằng các tài liệu cần được rõ ràng hơn về cách làm cho công việc này với nhiều cột để tránh sự nhập nhằng với một ví dụ được cung cấp – EdChum