我有一个如下所示的数据框
Index Batch Name
0 1 Jon
1
2 2 Adam
3
4 3 Voges
5
6 4 Jon
我想从这个数据框中创建另一个数据帧,并将批次编号分组
Batch Name/Batches
1 Jon(1,4)
2 Adam(2)
3 Voges(3)
4 Jon(1,4)
我怎么能这样做,如果我从现有DF创建一个新列表或ordereddict然后将其转换为另一个DF,或者这可以在运行中完成.
更新:
在他们之间编辑Spaces
最佳答案 这是使用groupby变换和自定义函数的一种方法:
def stringer(x):
return '('+', '.join(map(str, x))+')'
df['Name'] += df.groupby('Name')['Batch'].transform(stringer)
print(df)
Batch Name
0 1 Jon(1, 4)
1 2 Adam(2)
2 3 Voges(3)
3 4 Jon(1, 4)
更新空行的记帐
在这种情况下你可以使用numpy.where:
import numpy as np
def stringer(x):
return '('+', '.join(map(str, map(int, x)))+')'
s = df.dropna(subset=['Name']).groupby('Name')['Batch'].apply(stringer)
df['Name/Batch'] = np.where(df['Name'].notnull(),
df['Name'] + df['Name'].map(s),
df['Name'])
print(df)
Index Batch Name Name/Batch
0 0 1.0 Jon Jon(1, 4)
1 1 NaN NaN NaN
2 2 2.0 Adam Adam(2)
3 3 NaN NaN NaN
4 4 3.0 Voges Voges(3)
5 5 NaN NaN NaN
6 6 4.0 Jon Jon(1, 4)