如何在将 'aggregated' 列分配给新列时对两列进行分组?
How to groupby two columns while assigning 'aggregated' columns to new columns?
我正在使用 Python,我需要在 "R" 列上 "aggregate" 然后 "J",这样对于每个 R,每一行都是唯一的"J"。
我不想丢失C中的数据,所以我需要为T=1创建新列,命名为C1 for T=2,命名为C2 for T=2,命名为C2 for T=3,写入相应的数据使用 T 从 C 到 C1、C2 或 C3。
所以我需要从:
#______________ _______________________________
#| R J T C | |# R J C(T=1) C(T=2) C(T=3)|
#| a 1 1 x | |# a 1 x y z |
#| a 1 2 y | |# b 1 w |
#| a 1 3 z | -----> |# b 2 v |
#| b 1 1 w | |# b 3 s |
#| b 2 1 v | |# c 1 t r |
#| b 3 1 s | |# c 2 u |
#| c 1 1 t | |______________________________|
#| c 1 2 r |
#| c 2 1 u |
#|____________|
data = {'R': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
'J': [1, 1, 1, 1, 2, 3, 1, 1, 2],
'T': [1, 2, 3, 1, 1, 1, 1, 2, 1],
'C': ['x', 'y', 'z', 'w', 'v', 's', 't', 'r', 'u'] }
df = pd.DataFrame(data=data)
PS。如果有帮助,列 J 和 T 都有一个带有唯一 ID 的额外列。
J_ID = [1,1,1,2,3,4,5,5,6]
T_ID = [1,2,3,4,5,6,7,8,9]
如有任何帮助,我们将不胜感激。
你可以使用groupby,然后将C列转换为列表,再转换为Series。
(
df.groupby(['R','J'])
.apply(lambda x: x.C.tolist()).apply(pd.Series)
.rename(columns=lambda x: f'C{x+1}')
.reset_index()
)
R J C1 C2 C3
0 a 1 x y z
1 b 1 w NaN NaN
2 b 2 v NaN NaN
3 b 3 s NaN NaN
4 c 1 t r NaN
5 c 2 u NaN NaN
我正在使用 Python,我需要在 "R" 列上 "aggregate" 然后 "J",这样对于每个 R,每一行都是唯一的"J"。
我不想丢失C中的数据,所以我需要为T=1创建新列,命名为C1 for T=2,命名为C2 for T=2,命名为C2 for T=3,写入相应的数据使用 T 从 C 到 C1、C2 或 C3。
所以我需要从:
#______________ _______________________________
#| R J T C | |# R J C(T=1) C(T=2) C(T=3)|
#| a 1 1 x | |# a 1 x y z |
#| a 1 2 y | |# b 1 w |
#| a 1 3 z | -----> |# b 2 v |
#| b 1 1 w | |# b 3 s |
#| b 2 1 v | |# c 1 t r |
#| b 3 1 s | |# c 2 u |
#| c 1 1 t | |______________________________|
#| c 1 2 r |
#| c 2 1 u |
#|____________|
data = {'R': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
'J': [1, 1, 1, 1, 2, 3, 1, 1, 2],
'T': [1, 2, 3, 1, 1, 1, 1, 2, 1],
'C': ['x', 'y', 'z', 'w', 'v', 's', 't', 'r', 'u'] }
df = pd.DataFrame(data=data)
PS。如果有帮助,列 J 和 T 都有一个带有唯一 ID 的额外列。
J_ID = [1,1,1,2,3,4,5,5,6]
T_ID = [1,2,3,4,5,6,7,8,9]
如有任何帮助,我们将不胜感激。
你可以使用groupby,然后将C列转换为列表,再转换为Series。
(
df.groupby(['R','J'])
.apply(lambda x: x.C.tolist()).apply(pd.Series)
.rename(columns=lambda x: f'C{x+1}')
.reset_index()
)
R J C1 C2 C3
0 a 1 x y z
1 b 1 w NaN NaN
2 b 2 v NaN NaN
3 b 3 s NaN NaN
4 c 1 t r NaN
5 c 2 u NaN NaN