【发布时间】:2018-05-31 19:57:47
【问题描述】:
我在 pandas python 中有一个数据框如下 data frame
<table style="width:100%">
<tr>
<th>ID</th>
<th>AGE</th>
<th>GENDER</th>
<th>TIME</th>
<th>CODE</th>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>2</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>3</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>4</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>20</td>
<td>F</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>20</td>
<td>F</td>
<td>2</td>
<td>0</td>
<tr>
<td>2</td>
<td>20</td>
<td>F</td>
<td>3</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>2</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>3</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>4</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>5</td>
<td>1</td>
</tr>
</table>
1 66 米 1 1 1 66 米 2 1 1 66 米 3 1 2 20 女 1 0 2 20 女 2 0 2 20 女 3 0 2 20 女 4 0 3 18 女 1 1 3 18 女 2 1 3 18 女 3 1 3 18 F 4 1
我需要根据以下更改最后一列(只要“CODE”列为 1,则将该 ID 的最后一行保持为 1,并将前面的行更改为零)
<table style="width:100%">
<tr>
<th>ID</th>
<th>AGE</th>
<th>GENDER</th>
<th>TIME</th>
<th>CODE</th>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>2</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>3</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>66</td>
<td>M</td>
<td>4</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>20</td>
<td>F</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>20</td>
<td>F</td>
<td>2</td>
<td>0</td>
<tr>
<td>2</td>
<td>20</td>
<td>F</td>
<td>3</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>2</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>3</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>4</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>18</td>
<td>F</td>
<td>5</td>
<td>1</td>
</tr>
</table>
如何使用 pandas 来做到这一点?
查找后我发现这行代码删除了每组的最后一行 dfnew = (df.groupby('ID').apply(lambda x: x.iloc[:-1] if len(x)>1 else x))
提前致谢
【问题讨论】:
-
只有
0和1值? -
@jezrael 是的,它只有 0 和 1 个值。
-
@jezrael 感谢您的回答,它对我帮助很大,另一个问题,正如您所见,每个 ID 都有几行,我需要将数据集拆分为训练和测试,保持所有相同的 ID相同的集合(例如 ID 号 1 应该只是在 Train(Test) 中等等)。你能帮忙解决这个问题吗?
-
不幸的是,我现在离线,只能在手机上,所以最好发布新问题。谢谢。