Skip to content

Commit

Permalink
Fix issue #59333
Browse files Browse the repository at this point in the history
  • Loading branch information
anzor authored and anzor committed Oct 15, 2024
1 parent 2a10e04 commit 1b7dc81
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
6 changes: 3 additions & 3 deletions pandas/core/indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2353,7 +2353,6 @@ def ravel(i):
return i.ravel() if isinstance(i, np.ndarray) else i

indexer = tuple(map(ravel, indexer))

aligners = [not com.is_null_slice(idx) for idx in indexer]
sum_aligners = sum(aligners)
single_aligner = sum_aligners == 1
Expand All @@ -2371,7 +2370,9 @@ def ravel(i):

# we have a frame, with multiple indexers on both axes; and a
# series, so need to broadcast (see GH5206)
if sum_aligners == self.ndim and all(is_sequence(_) for _ in indexer):
if len(indexer) == self.ndim and all(
is_sequence(_) or isinstance(_, slice) for _ in indexer
):
ser_values = ser.reindex(obj.axes[0][indexer[0]])._values

# single indexer
Expand Down Expand Up @@ -2399,7 +2400,6 @@ def ravel(i):
if using_cow:
return ser
return ser._values.copy()

return ser.reindex(new_ix)._values

# 2 dims
Expand Down
33 changes: 33 additions & 0 deletions pandas/tests/indexing/test_loc.py
Original file line number Diff line number Diff line change
Expand Up @@ -3297,3 +3297,36 @@ def test_loc_reindexing_of_empty_index(self):
df.loc[Series([False] * 4, index=df.index, name=0), 0] = df[0]
expected = DataFrame(index=[1, 1, 2, 2], data=["1", "1", "2", "2"])
tm.assert_frame_equal(df, expected)

def test_loc_set_series_to_multiple_columns(self):
# GH 59933
df = DataFrame([[1, 2, 3], [4, 5, 6]], columns=list("ABC"))
df.loc[0:3, ["A", "B", "C"]] = Series([10, 20, 30])
expected = DataFrame([[10, 10, 10], [20, 20, 20]], columns=list("ABC"))
tm.assert_frame_equal(df, expected)

df = DataFrame([[1, 2, 3], [4, 5, 6]], columns=list("ABC"))
df.loc[:, ["A", "B", "C"]] = Series([10, 20, 30])
expected = DataFrame([[10, 10, 10], [20, 20, 20]], columns=list("ABC"))
tm.assert_frame_equal(df, expected)

df = DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=list("ABC"))
df.loc[df["A"] > 0, ["A", "B", "C"]] = Series([10, 20, 30])
expected = DataFrame(
[[10, 10, 10], [20, 20, 20], [30, 30, 30]], columns=list("ABC")
)
tm.assert_frame_equal(df, expected)

df = DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=list("ABC"))
df.loc[:, ["A", "B", "C"]] = Series([10, 20, 30])
expected = DataFrame(
[[10, 10, 10], [20, 20, 20], [30, 30, 30]], columns=list("ABC")
)
tm.assert_frame_equal(df, expected)

df = DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=list("ABC"))
df.loc[0:4, ["A", "B", "C"]] = Series([10, 20, 30])
expected = DataFrame(
[[10, 10, 10], [20, 20, 20], [30, 30, 30]], columns=list("ABC")
)
tm.assert_frame_equal(df, expected)

0 comments on commit 1b7dc81

Please sign in to comment.