簡體   English   中英

從另一個Dataframe創建Dataframe

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM