gpt4 book ai didi

python - 如何使用行的值 'unravel' 数据帧?

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:10 26 4
gpt4 key购买 nike

我有一个如下所示的DataFrame:

class    passed       failed           extra_teaching
A11 1 2 0.5
A12 2 1 0.7

我想“解开”DataFrame,并丢失有关类(class)的信息,但保留有关 extra_teaching 的信息,因此我最终为每个人生成一行通过的学生。

因此,DataFrame 最终应如下所示:

pass           extra_teaching
1 0.5
0 0.5
0 0.5
1 0.7
1 0.7
0 0.7

我不知道如何在 pandas 中执行此操作,除非使用 iterrows() 并手动将行附加到新的 DataFrame - 有谁有更简洁的方法吗?

更新:

我尝试过这个,似乎可以工作,但不是很优雅:

temp = []
df = df.set_index('class')
for idx in df.index:
row = df.loc[idx]
t = {'class': idx, 'extra_teaching': row['extra_teaching']}
for i in range(0, int(row['passed'])):
t['pass'] = 1
temp.append(t)
for i in range(0, int(row['failed'])):
t['pass'] = 0
temp.append(t)
df_exploded = pd.DataFrame(temp)

最佳答案

尝试:

def teaching_results(x):
num_rows = x.passed.iloc[0] + x.failed.iloc[0]
passed = x.passed.iloc[0] * [1] + x.failed.iloc[0] * [0]
extra_teaching = num_rows * [x.extra_teaching.iloc[0]]
class_code = x['class'].iloc[0]
return pd.DataFrame({'pass': passed, 'extra_teaching': extra_teaching, 'class': class_code})

df.groupby('class', as_index=False).apply(lambda x: teaching_results(x))

获取:

    class  extra_teaching  pass
0 0 A11 0.5 1
1 A11 0.5 0
2 A11 0.5 0
1 0 A12 0.7 1
1 A12 0.7 1
2 A12 0.7 0

关于python - 如何使用行的值 'unravel' 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com