Skip to content

Commit 1b7dc81

Browse files
anzoranzor
anzor
authored and
anzor
committed
Fix issue pandas-dev#59333
1 parent 2a10e04 commit 1b7dc81

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

pandas/core/indexing.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -2353,7 +2353,6 @@ def ravel(i):
23532353
return i.ravel() if isinstance(i, np.ndarray) else i
23542354

23552355
indexer = tuple(map(ravel, indexer))
2356-
23572356
aligners = [not com.is_null_slice(idx) for idx in indexer]
23582357
sum_aligners = sum(aligners)
23592358
single_aligner = sum_aligners == 1
@@ -2371,7 +2370,9 @@ def ravel(i):
23712370

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

23772378
# single indexer
@@ -2399,7 +2400,6 @@ def ravel(i):
23992400
if using_cow:
24002401
return ser
24012402
return ser._values.copy()
2402-
24032403
return ser.reindex(new_ix)._values
24042404

24052405
# 2 dims

pandas/tests/indexing/test_loc.py

+33
Original file line numberDiff line numberDiff line change
@@ -3297,3 +3297,36 @@ def test_loc_reindexing_of_empty_index(self):
32973297
df.loc[Series([False] * 4, index=df.index, name=0), 0] = df[0]
32983298
expected = DataFrame(index=[1, 1, 2, 2], data=["1", "1", "2", "2"])
32993299
tm.assert_frame_equal(df, expected)
3300+
3301+
def test_loc_set_series_to_multiple_columns(self):
3302+
# GH 59933
3303+
df = DataFrame([[1, 2, 3], [4, 5, 6]], columns=list("ABC"))
3304+
df.loc[0:3, ["A", "B", "C"]] = Series([10, 20, 30])
3305+
expected = DataFrame([[10, 10, 10], [20, 20, 20]], columns=list("ABC"))
3306+
tm.assert_frame_equal(df, expected)
3307+
3308+
df = DataFrame([[1, 2, 3], [4, 5, 6]], columns=list("ABC"))
3309+
df.loc[:, ["A", "B", "C"]] = Series([10, 20, 30])
3310+
expected = DataFrame([[10, 10, 10], [20, 20, 20]], columns=list("ABC"))
3311+
tm.assert_frame_equal(df, expected)
3312+
3313+
df = DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=list("ABC"))
3314+
df.loc[df["A"] > 0, ["A", "B", "C"]] = Series([10, 20, 30])
3315+
expected = DataFrame(
3316+
[[10, 10, 10], [20, 20, 20], [30, 30, 30]], columns=list("ABC")
3317+
)
3318+
tm.assert_frame_equal(df, expected)
3319+
3320+
df = DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=list("ABC"))
3321+
df.loc[:, ["A", "B", "C"]] = Series([10, 20, 30])
3322+
expected = DataFrame(
3323+
[[10, 10, 10], [20, 20, 20], [30, 30, 30]], columns=list("ABC")
3324+
)
3325+
tm.assert_frame_equal(df, expected)
3326+
3327+
df = DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=list("ABC"))
3328+
df.loc[0:4, ["A", "B", "C"]] = Series([10, 20, 30])
3329+
expected = DataFrame(
3330+
[[10, 10, 10], [20, 20, 20], [30, 30, 30]], columns=list("ABC")
3331+
)
3332+
tm.assert_frame_equal(df, expected)

0 commit comments

Comments
 (0)