我想在数据框的末尾附加一行,该行可以按变量分组。
我的数据框如下所示:

|ID | Name1 | Name2 | PointA | PointB | Var1 | Var2 |
| 1 | AAA   | zzz   | ABC    | BCD    |  1   |  5   |
| 1 | AAA   | zzz   | BCD    | CDE    |  2   |  5   |
| 1 | AAA   | zzz   | CDE    | DEF    |  3   |  5   |
| 2 | BBB   | yyy   | STU    | TUV    |  1   |  6   |
| 2 | BBB   | yyy   | TUV    | UVW    |  2   |  6   |
| 2 | BBB   | yyy   | UVW    | VWX    |  3   |  6   |
| 2 | BBB   | yyy   | VWX    | WXY    |  4   |  6   |


我想要的是在ID定义的每个类别的末尾添加一行:

|ID | Name1 | Name2 | PointA | PointB | Var1 | Var2 |
| 1 | AAA   | zzz   | ABC    | BCD    |  1   |  5   |
| 1 | AAA   | zzz   | BCD    | CDE    |  2   |  5   |
| 1 | AAA   | zzz   | CDE    | DEF    |  3   |  5   |
| 1 | AAA   | zzz   | DEF    | ---    |  4   |  0   |
| 2 | BBB   | yyy   | STU    | TUV    |  1   |  6   |
| 2 | BBB   | yyy   | TUV    | UVW    |  2   |  6   |
| 2 | BBB   | yyy   | UVW    | VWX    |  3   |  6   |
| 2 | BBB   | yyy   | VWX    | WXY    |  4   |  6   |
| 2 | BBB   | yyy   | WXY    | ---    |  5   |  0   |


我尝试过:(我的原始df称为operacionales

df = pd.DataFrame(columns = operacionales.columns)
val = range(1, 22223)
for x in val:
    test = operacionales.loc[operacionales['ID'] == x]
    li = [test.ID.iloc[0], test.Name1.iloc[0], test.Name2.iloc[0],
test.PointB.iloc[-1], '-', test.Var1.max() + 1, 0]
    t = pd.DataFrame(li).T
    t.columns = test.columns
    test2 = test.append(t)
    df = df.append(test2)


但我收到“ IndexError:单个位置索引器超出范围”
 我尝试了相同的操作,但是在代码中使用索引[-1]而不是[0],结果是相同的。

如您所见,我要添加的行与该组的其他行相同,除了:
1. PointA(我想成为PointB变量的最后一个值),
2. PointB(我想将其设置为“ ---”),
3. Var1(我想成为组中最后一个值的+1),然后
4. Point2(我要将其设置为0)。

我找到了这个(append rows to a Pandas groupby object),但并没有真正帮助我。

任何帮助,将不胜感激。

最佳答案

您可以使用groupby /应用:

def append_column_to_group(group):
    result = group
    result = result.append({'ID': 1,
                            'Name1': group.iloc[0].Name1,
                            'Name2': group.iloc[0].Name2,
                            'PointA': group.iloc[-1].PointB,
                            'PointB': '---',
                            'Var1': group.iloc[-1].Var1 + 1,
                            'Var2': 0}, ignore_index=True)
    return result
df.groupby('Name1').apply(append_column_to_group)

关于python - 如何将具有特定特征的行 append 到组的末尾?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56047943/

10-11 06:47