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()
基本上我有一个 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()