Skip to content
12 changes: 10 additions & 2 deletions bigframes/display/anywidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ def _cached_data(self) -> pd.DataFrame:
"""Combine all cached batches into a single DataFrame."""
if not self._cached_batches:
return pd.DataFrame(columns=self._dataframe.columns)
return pd.concat(self._cached_batches, ignore_index=True)
return pd.concat(self._cached_batches)

def _reset_batch_cache(self) -> None:
"""Resets batch caching attributes."""
Expand Down Expand Up @@ -294,7 +294,15 @@ def _set_table_html(self) -> None:
break

# Get the data for the current page
page_data = cached_data.iloc[start:end]
page_data = cached_data.iloc[start:end].copy()

# Handle index display
if self._dataframe._block.has_index and page_data.index.name is not None:
# Custom named index - include it with its actual name
page_data.insert(0, page_data.index.name, page_data.index)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's display the real index values, even if the index has no name.

Suggested change
if self._dataframe._block.has_index and page_data.index.name is not None:
# Custom named index - include it with its actual name
page_data.insert(0, page_data.index.name, page_data.index)
if self._dataframe._block.has_index:
index_name = page_data.index.name
page_data.insert(0, index_name if index_name is not None else "", page_data.index)

Copy link
Contributor Author

@shuoweil shuoweil Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

testcase is updated accordingly

else:
# Default index - include as "Row" column
page_data.insert(0, "Row", range(start + 1, start + len(page_data) + 1))

# Handle case where user navigated beyond available data with unknown row count
is_unknown_count = self.row_count is None
Expand Down
168 changes: 84 additions & 84 deletions notebooks/dataframes/anywidget_mode.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -107,16 +107,16 @@
"output_type": "stream",
"text": [
"state gender year name number\n",
" AL F 1910 Annie 482\n",
" AL F 1910 Myrtle 104\n",
" AR F 1910 Lillian 56\n",
" CT F 1910 Anne 38\n",
" CT F 1910 Frances 45\n",
" FL F 1910 Margaret 53\n",
" GA F 1910 Mae 73\n",
" GA F 1910 Beatrice 96\n",
" GA F 1910 Lola 47\n",
" IA F 1910 Viola 49\n",
" AL F 1910 Vera 71\n",
" AR F 1910 Viola 37\n",
" AR F 1910 Alice 57\n",
" AR F 1910 Edna 95\n",
" AR F 1910 Ollie 40\n",
" CA F 1910 Beatrice 37\n",
" CT F 1910 Marion 36\n",
" CT F 1910 Marie 36\n",
" FL F 1910 Alice 53\n",
" GA F 1910 Thelma 133\n",
"...\n",
"\n",
"[5552452 rows x 5 columns]\n"
Expand Down Expand Up @@ -196,7 +196,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e2231d99614a4489b2930c24b30f1d34",
"model_id": "0eed2201e13d496ab741662d96eddc14",
"version_major": 2,
"version_minor": 1
},
Expand Down Expand Up @@ -232,98 +232,98 @@
" <td>AL</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Hazel</td>\n",
" <td>51</td>\n",
" <td>Sadie</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AL</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Lucy</td>\n",
" <td>76</td>\n",
" <td>Mary</td>\n",
" <td>875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AR</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Nellie</td>\n",
" <td>Vera</td>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AR</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Lena</td>\n",
" <td>40</td>\n",
" <td>Marie</td>\n",
" <td>78</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>CO</td>\n",
" <td>AR</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Thelma</td>\n",
" <td>36</td>\n",
" <td>Lucille</td>\n",
" <td>66</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>CO</td>\n",
" <td>CA</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Ruth</td>\n",
" <td>68</td>\n",
" <td>Virginia</td>\n",
" <td>101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>CT</td>\n",
" <td>DC</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Elizabeth</td>\n",
" <td>86</td>\n",
" <td>Margaret</td>\n",
" <td>72</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>DC</td>\n",
" <td>GA</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Mary</td>\n",
" <td>80</td>\n",
" <td>Mildred</td>\n",
" <td>133</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>FL</td>\n",
" <td>GA</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Annie</td>\n",
" <td>101</td>\n",
" <td>Vera</td>\n",
" <td>51</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>FL</td>\n",
" <td>GA</td>\n",
" <td>F</td>\n",
" <td>1910</td>\n",
" <td>Alma</td>\n",
" <td>39</td>\n",
" <td>Sallie</td>\n",
" <td>92</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10 rows × 5 columns</p>\n",
"</div>[5552452 rows x 5 columns in total]"
],
"text/plain": [
"state gender year name number\n",
" AL F 1910 Hazel 51\n",
" AL F 1910 Lucy 76\n",
" AR F 1910 Nellie 39\n",
" AR F 1910 Lena 40\n",
" CO F 1910 Thelma 36\n",
" CO F 1910 Ruth 68\n",
" CT F 1910 Elizabeth 86\n",
" DC F 1910 Mary 80\n",
" FL F 1910 Annie 101\n",
" FL F 1910 Alma 39\n",
"state gender year name number\n",
" AL F 1910 Sadie 40\n",
" AL F 1910 Mary 875\n",
" AR F 1910 Vera 39\n",
" AR F 1910 Marie 78\n",
" AR F 1910 Lucille 66\n",
" CA F 1910 Virginia 101\n",
" DC F 1910 Margaret 72\n",
" GA F 1910 Mildred 133\n",
" GA F 1910 Vera 51\n",
" GA F 1910 Sallie 92\n",
"...\n",
"\n",
"[5552452 rows x 5 columns]"
Expand Down Expand Up @@ -409,12 +409,12 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f26e26da0c84469fb7a9c211ab4423b7",
"model_id": "45766d5dd61744c2a1c2448b8eddc86d",
"version_major": 2,
"version_minor": 1
},
"text/plain": [
"<bigframes.display.anywidget.TableWidget object at 0x7fd970f4b750>"
"<bigframes.display.anywidget.TableWidget object at 0x7fa2cdb07750>"
]
},
"execution_count": 7,
Expand Down Expand Up @@ -523,12 +523,12 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f1a893516ee04a5f9eb2655d5aaca778",
"model_id": "cf835e468a03459f9bd2df0f1a3979ed",
"version_major": 2,
"version_minor": 1
},
"text/plain": [
"<bigframes.display.anywidget.TableWidget object at 0x7fd97056c550>"
"<bigframes.display.anywidget.TableWidget object at 0x7fa2cc0fc550>"
]
},
"execution_count": 9,
Expand Down Expand Up @@ -563,7 +563,7 @@
"data": {
"text/html": [
"✅ Completed. \n",
" Query processed 85.9 kB in 11 seconds of slot time.\n",
" Query processed 85.9 kB in 18 seconds of slot time.\n",
" "
],
"text/plain": [
Expand Down Expand Up @@ -624,7 +624,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d48598e7d34a4fd0a817e4995868395e",
"model_id": "39a3ce333e8b4e13aa69fca9c0a08a4e",
"version_major": 2,
"version_minor": 1
},
Expand Down Expand Up @@ -707,6 +707,24 @@
" <td>gs://gcs-public-data--labeled-patents/espacene...</td>\n",
" <td>EU</td>\n",
" <td>DE</td>\n",
" <td>29.08.018</td>\n",
" <td>E04H 6/12</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>18157874.1</td>\n",
" <td>21.02.2018</td>\n",
" <td>22.02.2017</td>\n",
" <td>Liedtke &amp; Partner Patentanw√§lte</td>\n",
" <td>SHB Hebezeugbau GmbH</td>\n",
" <td>VOLGER, Alexander</td>\n",
" <td>STEUERUNGSSYSTEM FÜR AUTOMATISCHE PARKHÄUSER</td>\n",
" <td>EP 3 366 869 A1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>{'application_number': None, 'class_internatio...</td>\n",
" <td>gs://gcs-public-data--labeled-patents/espacene...</td>\n",
" <td>EU</td>\n",
" <td>DE</td>\n",
" <td>03.10.2018</td>\n",
" <td>A01K 31/00</td>\n",
" <td>&lt;NA&gt;</td>\n",
Expand All @@ -720,7 +738,7 @@
" <td>EP 3 381 276 A1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <td>{'application_number': None, 'class_internatio...</td>\n",
" <td>gs://gcs-public-data--labeled-patents/espacene...</td>\n",
" <td>EU</td>\n",
Expand All @@ -737,24 +755,6 @@
" <td>VORRICHTUNG ZUR INDUKTIVEN ENERGIE√úBERTRAGUNG</td>\n",
" <td>EP 3 383 141 A2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>{'application_number': None, 'class_internatio...</td>\n",
" <td>gs://gcs-public-data--labeled-patents/espacene...</td>\n",
" <td>EU</td>\n",
" <td>DE</td>\n",
" <td>29.08.018</td>\n",
" <td>E04H 6/12</td>\n",
" <td>&lt;NA&gt;</td>\n",
" <td>18157874.1</td>\n",
" <td>21.02.2018</td>\n",
" <td>22.02.2017</td>\n",
" <td>Liedtke &amp; Partner Patentanw√§lte</td>\n",
" <td>SHB Hebezeugbau GmbH</td>\n",
" <td>VOLGER, Alexander</td>\n",
" <td>STEUERUNGSSYSTEM FÜR AUTOMATISCHE PARKHÄUSER</td>\n",
" <td>EP 3 366 869 A1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 15 columns</p>\n",
Expand All @@ -778,30 +778,30 @@
" publication_date class_international class_us application_number \\\n",
"0 03.10.2018 H01L 21/20 <NA> 18166536.5 \n",
"1 03.10.2018 G06F 11/30 <NA> 18157347.8 \n",
"2 03.10.2018 A01K 31/00 <NA> 18171005.4 \n",
"3 03.10.2018 H05B 6/12 <NA> 18165514.3 \n",
"4 29.08.018 E04H 6/12 <NA> 18157874.1 \n",
"2 29.08.018 E04H 6/12 <NA> 18157874.1 \n",
"3 03.10.2018 A01K 31/00 <NA> 18171005.4 \n",
"4 03.10.2018 H05B 6/12 <NA> 18165514.3 \n",
"\n",
" filing_date priority_date_eu representative_line_1_eu \\\n",
"0 16.02.2016 <NA> Scheider, Sascha et al \n",
"1 19.02.2018 31.03.2017 Hoffmann Eitle \n",
"2 05.02.2015 05.02.2014 Stork Bamberger Patentanw√§lte \n",
"3 03.04.2018 30.03.2017 <NA> \n",
"4 21.02.2018 22.02.2017 Liedtke & Partner Patentanw√§lte \n",
"2 21.02.2018 22.02.2017 Liedtke & Partner Patentanw√§lte \n",
"3 05.02.2015 05.02.2014 Stork Bamberger Patentanw√§lte \n",
"4 03.04.2018 30.03.2017 <NA> \n",
"\n",
" applicant_line_1 inventor_line_1 \\\n",
"0 EV Group E. Thallner GmbH Kurz, Florian \n",
"1 FUJITSU LIMITED Kukihara, Kensuke \n",
"2 Linco Food Systems A/S Thrane, Uffe \n",
"3 BSH Hausger√§te GmbH Acero Acero, Jesus \n",
"4 SHB Hebezeugbau GmbH VOLGER, Alexander \n",
"2 SHB Hebezeugbau GmbH VOLGER, Alexander \n",
"3 Linco Food Systems A/S Thrane, Uffe \n",
"4 BSH Hausger√§te GmbH Acero Acero, Jesus \n",
"\n",
" title_line_1 number \n",
"0 VORRICHTUNG ZUM BONDEN VON SUBSTRATEN EP 3 382 744 A1 \n",
"1 METHOD EXECUTED BY A COMPUTER, INFORMATION PRO... EP 3 382 553 A1 \n",
"2 MASTHÄHNCHENCONTAINER ALS BESTANDTEIL EINER E... EP 3 381 276 A1 \n",
"3 VORRICHTUNG ZUR INDUKTIVEN ENERGIE√úBERTRAGUNG EP 3 383 141 A2 \n",
"4 STEUERUNGSSYSTEM FÜR AUTOMATISCHE PARKHÄUSER EP 3 366 869 A1 \n",
"2 STEUERUNGSSYSTEM FÜR AUTOMATISCHE PARKHÄUSER EP 3 366 869 A1 \n",
"3 MASTHÄHNCHENCONTAINER ALS BESTANDTEIL EINER E... EP 3 381 276 A1 \n",
"4 VORRICHTUNG ZUR INDUKTIVEN ENERGIE√úBERTRAGUNG EP 3 383 141 A2 \n",
"\n",
"[5 rows x 15 columns]"
]
Expand Down
Loading