[英]Create Dataframe from another Dataframe
我有一個如下所示的數據框
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
In [33]: df['Name/Batches'] = \
df['Name'] + '(' + \
df.groupby('Name')['Batch'].transform(lambda x: x.astype(str).str.cat(sep=',')) \
+ ')'
In [34]: df
Out[34]:
Batch Name Name/Batches
0 1 Jon Jon(1,4)
1 2 Adam Adam(2)
2 3 Voges Voges(3)
3 4 Jon Jon(1,4)
這是使用groupby
+ transform
和自定義函數的一種方法:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.