gpt4 book ai didi

pandas - 如何用 Pandas 索引值的唯一组合

转载 作者:行者123 更新时间:2023-12-05 03:06:43 26 4
gpt4 key购买 nike

我正在处理学校时间表数据,我必须区分同一类(class)的不同类(class)。

如果不同的类(class)有相同的类(class),这实际上是同一类(class)的另一节课,需要加以区分。这意味着有一个带有 session 索引的额外列。

import pandas as pd

cols = ['course', 'class_name', 'professor']

data = [ ['Math', 'X', 'Bob'],
['Math', 'X', 'Bob'],
['Math', 'Y', 'Bob'],
['English', 'Y', 'Tim'],
['English', 'X', 'Jim'],
['English', 'X', 'Jim'],
]

df = pd.DataFrame(columns=cols, data=data)

# Add session
df['session'] = '?'
print(df)

结果应该是这样的。

    course  class_name  professor   session
0 Math X Bob 0
1 Math X Bob 0
2 Math Y Bob 1
3 Eng. Y Tim 1
4 Eng. X Jim 0
5 Eng. X Jim 0

我想出了一个复杂的程序解决方案,什么是更 pandas 的方法呢?

groups = df.groupby(['course', 'class_name'])

d_sessions = {}
counter = 0
pclass = ""
pcourse = ""

for m_idx in list(groups.groups):
course = m_idx[0]
class_ = m_idx[1]

if class_ != pclass:
counter += 1

if pcourse != course:
counter = 0

pclass = class_
pcourse = course
d_sessions[m_idx] = counter

df.set_index(['course', 'class_name'], inplace=True)

for k, v in d_sessions.items():
df.set_value(col='index', value=v, index=k)

df.reset_index(inplace=True)
df

最佳答案

让我们试试:

df['session'] = df.groupby('course')['class_name'].transform(lambda x: (~x.duplicated()).cumsum())

输出:

    course class_name professor  session
0 Math X Bob 1
1 Math X Bob 1
2 Math Y Bob 2
3 English Y Tim 1
4 English X Jim 2
5 English X Jim 2

关于pandas - 如何用 Pandas 索引值的唯一组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932778/

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