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

标签 python pandas

我有一个如下所示的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/

相关文章:

第二次运行时,Python IBAPI reqContractDetails 不会返回结果

python - 我是否必须不断更改默认的 python 版本?

python - wxPython 在 Vista 下崩溃

Python PyQT - 网络浏览器 |书签

python - 在 Pandas 中减去日期时间列时返回错误

python - 使用 python 弹出数据框单元格中的第一个元素

python - 获取我的 Kafka 队列中的最新消息时间戳

python - Pandas 将数据框绘制为分散提示未知项目

python - 如何忽略存在空白值的行 Pandas Python

python - 我想用列表中第一次出现的字符串替换该字符串