Pandas 简单的 groupby 和应用抱怨 "Columns must be same length as key"

Pandas simple groupby and apply complains "Columns must be same length as key"

基本上我有一个 table 的时间戳和一些数据,我想按相同的时间戳分组并在分组的基础上更改时间戳。我得到了一些与

合作的东西

该解决方案似乎适用于许多行,但不适用于简单的数据集,我不明白为什么。我已将其缩小为下面的一个简单示例。

数据:

    t  val
    0  0.3
    0  0.2
    0  0.6
    0  0.4

预期结果:

    t  val
    1  0.3
    1  0.2
    1  0.6
    1  0.4

代码:

df = pd.DataFrame([[0, 0.3], [0, 0.2], [0, 0.6], [0, 0.4]], columns=["t", "val"])

# Group by timestamp and add +1 to each (just for demonstration)
df.t = df.groupby("t", group_keys=False).apply(lambda df: df.t + 1)

这引发了 ValueError: Columns must be same length as key 并且我看不出我做错了什么。任何帮助表示赞赏。

如果需要将值输出到新列,请使用 GroupBy.transform 并在 groupby 之后指定列进行处理:

df.t = df.groupby('t')['t'].transform(lambda x: x + 1)

应更改 np.linspace 的链接解决方案:

df.t = df.groupby('t')['t'].transform(lambda x: x + np.linspace(0, 1, len(x)))
print (df)
          t  val
0  0.000000  0.3
1  0.333333  0.2
2  0.666667  0.6
3  1.000000  0.4 

或通过GroupBy.cumcount添加计数器:

df.t += df.groupby('t').cumcount()