基于包含值的其他列复制行,然后 return 具有拆分列值的行
Duplicate rows based on other columns containing values, then return row with split column value
我有这个 df,其中包含需要根据 'Group' 列中被“-”分隔的字母数复制的行。我希望每个重复的行只包含 'Group' 列中的一个字母。
XYZ 没有任何“-”并且将保持为单个非重复行。
开始 df:
Date End Time Group Assignment
2/2/2021 1130 A-B-C quiz
2/2/2021 1230 XYZ test
1/22/2021 1330 B-D paper
1/22/2021 1130 A-E-C homework
这方面我试了好几次,都搞不定。这是我尝试过的一个例子:
df[['Group_1', 'Group_2', 'Group_3']] = df['Group'].str.split('-', expand=True)
df.drop(columns=['Group'], inplace=True)
df.to_csv('baz_schedule_modified.csv', index=False)
reps = [2 if not (val is np.nan) else 1 for val in df['Group_2']]
df = df.loc[np.repeat(df.index.values, reps)]
但我不知道从那里去哪里。
我希望 df 的结果如下:
Date End Time Group_1 Assignment
1/22/2021 1130 A homework
1/22/2021 1330 B paper
1/22/2021 1130 C homework
1/22/2021 1330 D paper
1/22/2021 1130 E homework
2/2/2021 1130 A quiz
2/2/2021 1130 B quiz
2/2/2021 1130 C quiz
2/2/2021 1230 XYZ test
感谢您对此的帮助!
试试这个:
df.assign(Group=df['Group'].str.split('-')).explode('Group')
输出:
Date End Time Group Assignment
0 2/2/2021 1130 A quiz
0 2/2/2021 1130 B quiz
0 2/2/2021 1130 C quiz
1 2/2/2021 1230 XYZ test
2 1/22/2021 1330 B paper
2 1/22/2021 1330 D paper
3 1/22/2021 1130 A homework
3 1/22/2021 1130 E homework
3 1/22/2021 1130 C homework
使用 assign
我们可以使用 str 访问器和 split
将 Group
重新分配为由 '-' 分隔的字符串列表。然后使用 pd.DataFrame.explode
我们可以分解该列表以在数据框中为列表中的每个元素创建行。
我有这个 df,其中包含需要根据 'Group' 列中被“-”分隔的字母数复制的行。我希望每个重复的行只包含 'Group' 列中的一个字母。 XYZ 没有任何“-”并且将保持为单个非重复行。 开始 df:
Date End Time Group Assignment
2/2/2021 1130 A-B-C quiz
2/2/2021 1230 XYZ test
1/22/2021 1330 B-D paper
1/22/2021 1130 A-E-C homework
这方面我试了好几次,都搞不定。这是我尝试过的一个例子:
df[['Group_1', 'Group_2', 'Group_3']] = df['Group'].str.split('-', expand=True)
df.drop(columns=['Group'], inplace=True)
df.to_csv('baz_schedule_modified.csv', index=False)
reps = [2 if not (val is np.nan) else 1 for val in df['Group_2']]
df = df.loc[np.repeat(df.index.values, reps)]
但我不知道从那里去哪里。
我希望 df 的结果如下:
Date End Time Group_1 Assignment
1/22/2021 1130 A homework
1/22/2021 1330 B paper
1/22/2021 1130 C homework
1/22/2021 1330 D paper
1/22/2021 1130 E homework
2/2/2021 1130 A quiz
2/2/2021 1130 B quiz
2/2/2021 1130 C quiz
2/2/2021 1230 XYZ test
感谢您对此的帮助!
试试这个:
df.assign(Group=df['Group'].str.split('-')).explode('Group')
输出:
Date End Time Group Assignment
0 2/2/2021 1130 A quiz
0 2/2/2021 1130 B quiz
0 2/2/2021 1130 C quiz
1 2/2/2021 1230 XYZ test
2 1/22/2021 1330 B paper
2 1/22/2021 1330 D paper
3 1/22/2021 1130 A homework
3 1/22/2021 1130 E homework
3 1/22/2021 1130 C homework
使用 assign
我们可以使用 str 访问器和 split
将 Group
重新分配为由 '-' 分隔的字符串列表。然后使用 pd.DataFrame.explode
我们可以分解该列表以在数据框中为列表中的每个元素创建行。