擅长:python、mysql、java
<p>这里有一些代码可以为您做到这一点。我基本上把它分为三个步骤</p>
<ol>
<li>执行groupby应用以获取对groupby操作应用自定义函数。这允许您为每对ID生成新名称,房间</李>
<li>将多重索引减少为原始索引。因为我们在两列上分组,所以索引现在是两列的分层分组。我们放弃了原来的名字,因为我们想用我们的新名字</李>
<li>对每个条目执行分解。这是因为为了简单起见,我们将应用结果计算为一个数组。随后的分解为数组中的每个元素指定一个唯一的行</李>
</ol>
<pre class="lang-py prettyprint-override"><code>def f(rooms_col):
arr = np.empty(len(rooms_col), dtype=object)
for i, name in enumerate(rooms_col):
arr[i] = name + f"_{i + 1}"
return arr
# assuming data is the data from above
tmp_df = data.groupby(["ID", "Room"])["Room"].apply(f)
# Drop the old room name
tmp_df.index = tmp_df.index.droplevel(1)
# Explode the results array -> 1 row per entry
df = tmp_df.explode()
print(df)
</code></pre>
<p>以下是您的输出:</p>
<pre><code>ID
34 Bedroom_1
34 Bedroom_2
34 Bedroom_3
34 Kitchen_1
34 Livingroom_1
34 Storage_1
50 Kitchen_1
50 Kitchen_2
89 Bedroom_1
89 Bedroom_2
89 Livingroom_1
98 Livingroom_1
Name: Room, dtype: object
</code></pre>