【发布时间】:2021-10-03 21:26:01
【问题描述】:
我想对数据框组应用函数并将函数输出作为新列。
这是我写的函数:
def get_centroids(sample):
# Ideally, re = complex_function(sample) that returns 1d array which has the same length as sample
# for simplicity let's use np.random.rand(len(sample))
re = pd.DataFrame({'B': np.random.rand(len(sample))})
print(re)
print(re.index)
return re
函数打印,
B
0 0.176083
1 0.984371
RangeIndex(start=0, stop=2, step=1)
让我们看看这个数据框。为简单起见,它只有一个组“a”。
df = pd.DataFrame({'A': 'a a'.split(),
'B': [1,43],
'C': [4,2]})
A B C
0 a 1 4
1 a 43 2
print(df.index)
RangeIndex(start=0, stop=2, step=1)
当我应用如下功能时,
df['test'] = df.groupby('A')[['B']].apply(get_centroids)
尽管 df 和 re 具有相似类型的索引,但它会抛出“TypeError:插入列的索引与帧索引不兼容”。任何帮助将不胜感激。
【问题讨论】:
-
尝试将
group_keys=False传递给groupby,请查看documentation 并通过打印groupby 结果试验group_keys参数而不将其分配给列。 -
感谢您的建议。我快速尝试了 group_keys=False,但它仍然给出了同样的错误。我会用它挖掘更多。
-
我试过了,但没有给出任何错误:
df["test"] = df.groupby("A", group_keys=False)[["B"]].apply(get_centroids)上面提供的示例数据。 -
谢谢伙计!但它仍然会引发错误...您是否运行了整个语句?与 df["test"] = 一样
-
是的整个语句,没有错误。我使用熊猫版本 1.2.4。
标签: python pandas dataframe group-by apply