python - 将多行分配给 Pandas 中的一个索引

标签 python pandas dataframe

我在 Pandas 中有一个 DataFrame,如下所示:

           Activity Name Activity Start Activity End
0                  Phone          04:00        08:00
1                  Lunch          08:00        08:30
2                 Coffee          08:30        08:45
3                  Phone          08:45        10:30
4         WrittenSupport          10:30        12:30
5                  Phone          04:00        08:00
6                  Lunch          08:00        08:30
7                 Coffee          08:30        08:45
8                  Phone          08:45        09:00
9                  Phone          06:00        09:00

我的 DataFrame 中的数据描述了轮类期间分配给座席的不同事件。问题是另一个带有代理的 DataFrame 只有 57 个名字,而通常有 4-5 个事件分配给一个人。当我合并我的 DataFrames 时,我最终得到 57 个代理和 265 个事件,它们显然与指定人员不匹配。

有什么帮助:每个人工作 8 小时。

如何将其转换为如下所示:

           Activity Name Activity Start Activity End
0                  Phone          04:00        08:00
                   Lunch          08:00        08:30
                  Coffee          08:30        08:45
                   Phone          08:45        10:30
          WrittenSupport          10:30        12:30
1                  Phone          04:00        08:00
                   Lunch          08:00        08:30
                  Coffee          08:30        08:45
                   Phone          08:45        09:00
                   Phone          06:00        09:00

最佳答案

如果您的代理和事件有单独的行,您可以像这样创建一个多索引:

import pandas as pd

# This is the dataframe data with activities you got from a single agent
agent_1 = [['Phone', 'Phone', 'Coffee', 'Lunch', 'Phone', 'Phone', 'Lunch', 'Lunch'],
           ['04:00', '08:30', '10:30', '04:00', '10:30', '04:00', '08:30', '10:30']]

# This is the dataframe data from a second agent
agent_2 = [['Phone', 'Pooping', 'Coffee', 'Lunch', 'Phone', 'Meeting', 'Lunch', 'Lunch'],
           ['08:45', '08:50', '10:30', '04:00', '10:30', '04:00', '08:30', '10:30']]

# We create the dataframe for agent 1
df1 = pd.DataFrame(agent_1).T
df1.columns = ['activity', 'time']


# We create the dataframe for agent 2
df2 = pd.DataFrame(agent_2).T
df2.columns = ['activity', 'time']

# Now we have to dataframes we can't really put together
print(df1)
print("----")
print(df2)
print("----")

# So we should give each dataframe a column with its agent.
df1['agent'] = "Agent_1"
df2['agent'] = "Agent_2"

# Now each dataframe has data on its agent
print(df1)
print("----")
print(df2)
print("----")

# Let's combine them
overview = pd.concat([df1, df2])
print(overview)
print("----")

# To make it even better, we could make a multi-index so we can index both agents AND activities
overview.set_index(['agent', 'activity'], inplace=True)
print(overview)

输出:

  activity   time
0    Phone  04:00
1    Phone  08:30
2   Coffee  10:30
3    Lunch  04:00
4    Phone  10:30
5    Phone  04:00
6    Lunch  08:30
7    Lunch  10:30
----
  activity   time
0    Phone  08:45
1  Pooping  08:50
2   Coffee  10:30
3    Lunch  04:00
4    Phone  10:30
5  Meeting  04:00
6    Lunch  08:30
7    Lunch  10:30
----
  activity   time    agent
0    Phone  04:00  Agent_1
1    Phone  08:30  Agent_1
2   Coffee  10:30  Agent_1
3    Lunch  04:00  Agent_1
4    Phone  10:30  Agent_1
5    Phone  04:00  Agent_1
6    Lunch  08:30  Agent_1
7    Lunch  10:30  Agent_1
----
  activity   time    agent
0    Phone  08:45  Agent_2
1  Pooping  08:50  Agent_2
2   Coffee  10:30  Agent_2
3    Lunch  04:00  Agent_2
4    Phone  10:30  Agent_2
5  Meeting  04:00  Agent_2
6    Lunch  08:30  Agent_2
7    Lunch  10:30  Agent_2
----
  activity   time    agent
0    Phone  04:00  Agent_1
1    Phone  08:30  Agent_1
2   Coffee  10:30  Agent_1
3    Lunch  04:00  Agent_1
4    Phone  10:30  Agent_1
5    Phone  04:00  Agent_1
6    Lunch  08:30  Agent_1
7    Lunch  10:30  Agent_1
0    Phone  08:45  Agent_2
1  Pooping  08:50  Agent_2
2   Coffee  10:30  Agent_2
3    Lunch  04:00  Agent_2
4    Phone  10:30  Agent_2
5  Meeting  04:00  Agent_2
6    Lunch  08:30  Agent_2
7    Lunch  10:30  Agent_2
----
                   time
agent   activity       
Agent_1 Phone     04:00
        Phone     08:30
        Coffee    10:30
        Lunch     04:00
        Phone     10:30
        Phone     04:00
        Lunch     08:30
        Lunch     10:30
Agent_2 Phone     08:45
        Pooping   08:50
        Coffee    10:30
        Lunch     04:00
        Phone     10:30
        Meeting   04:00
        Lunch     08:30
        Lunch     10:30

关于python - 将多行分配给 Pandas 中的一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54970742/

相关文章:

python - 如何将绘图添加到子图 matplotlib

python - 程序输入 4 个科目的 5 个学生分数,并输出学生和科目的最高平均分

python - 获取数据框中以数字开头的所有值

pandas - 如何将包含值列表的数据框列转换为具有出现次数的单独列?

python - 通过在两个 Pandas 数据帧之间迭代来识别相似的值。

python - 根据其他列表中的元素对元组列表进行排序

python - NLTK 使用语料库标记西类牙语单词

python - 按组将列转换为行

python - 如何在 Python 中使用 Pivot_Table 操作 Dataframe

r - dplyr - 在嵌套列表中按元素汇总