我有一个简单的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
列,重命名列,您可能想对由于NaN
s而在最后一列中转换为浮点的整数做点什么(
我相信有一种更干净的方法可以做到这一点,但希望这能让你开始!