如何解决Python:需要在数据框中找到每个试验的开始
我有一个包含多次试验的实验的 Pandas 数据框。试验编号为 1-12,每个试验有多个行。我想制作一列 1 和 0,其中 1 表示试验开始的位置。这是我的代码:
for i in df['Trial Start']:
if df.groupby('Trial Number').head(1):
i = 1
else:
i = 0
我收到错误“ValueError:DataFrame 的真值不明确”。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all'
我知道为什么我会收到这个错误,但我也知道肯定有更好的方法来做到这一点。任何帮助表示赞赏。
解决方法
您可以使用 transform()
来完成这项工作。
dict = {'Trial Number': [1,1,2,3,4,5,6]}
df = pd.DataFrame(dict)
df['Trial Start'] = df.groupby('Trial Number')['Trial Number']
.transform(lambda x: [1]+[0]*(len(x)-1))
print(df)
Trial Number Trial Start
0 1 1
1 1 0
2 1 0
3 1 0
4 2 1
5 2 0
6 3 1
7 3 0
8 3 0
9 3 0
10 4 1
11 4 0
12 4 0
13 4 0
14 5 1
15 6 1
在此示例中,传递给 transform()
的函数依次迭代传递系列,其中包括每个 groupby 组中的所有值。在这种情况下,该函数是一个 lambda 函数,它利用传递的 Series 的大小来构建一个相应大小的列表,其中第一个位置为 1,其余位置为 0。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。