按df-python中的列分组



我有一个简单的df。它有两列。我想根据a列的值进行分组。下面是一个简单的例子:如有任何意见,我们将不胜感激!

import pandas as pd
import numpy as np
df = pd.DataFrame()
df['a'] = [1, 2, 3, 4, 1, 2]
df['b'] = [10, 20, 30,40, 50,60]

所需输出为:

df = pd.DataFrame()
df['a'] = [1, 2, 3, 4]
df['b'] = [10, 20, 30,40 ]
df['b1'] = [50, 60, np.nan, np.nan ]

df

这里有一种做你想做的事情的方法。首先要按列"a"进行分组。通常groupby用于计算组聚合函数:

df.groupby('a')['b'].mean()

但在这种情况下,我们希望保持b的值与每个a相关联。你可以使用

[(a,list(b)) for a,b in df.groupby('a')['b']]    
[(1, [10, 50]), (2, [20, 60]), (3, [30]), (4, [40])]

将其转换为数据帧几乎让我们达到了目标:

df2 = pd.DataFrame([(a,list(b)) for a,b in df.groupby('a')['b']],
columns=['a','temp'])
a      temp
0  1  [10, 50]
1  2  [20, 60]
2  3      [30]
3  4      [40]

temp可以用to_list:分离成不同的列

pd.DataFrame(df2['temp'].to_list())
0     1
0  10  50.0
1  20  60.0
2  30   NaN
3  40   NaN

重新加入输出数据帧:

df2.join(df3)
a      temp   0     1
0  1  [10, 50]  10  50.0
1  2  [20, 60]  20  60.0
2  3      [30]  30   NaN
3  4      [40]  40   NaN

清理(删除temp列,重命名列,您可能想对由于NaNs而在最后一列中转换为浮点的整数做点什么(

我相信有一种更干净的方法可以做到这一点,但希望这能让你开始!

最新更新