簡體   English   中英

pandas將分組行轉換為列

[英]pandas convert grouped rows into columns

我有一個數據框,如:

label    column1
  a         1   
  a         2
  b         6
  b         4

我想用一個新列創建一個數據幀,其中tag1的相反值與標簽匹配。 如:

label    column1    column2
  a         1          2
  a         2          1
  b         6          4
  b         4          6

我知道使用groupby命令可能很簡單,但我一直在搜索,找不到任何東西。

你可以嘗試下面的代碼塊:

#create the Dataframe
df = pd.DataFrame({'label':['a','a','b','b'],
                  'column1':[1,2,6,4]})

#Group by label
a = df.groupby('label').first().reset_index()
b = df.groupby('label').last().reset_index()

#Concat those groups to create columns2
df2 = (pd.concat([b,a])
       .sort_values(by='label')
       .rename(columns={'column1':'column2'})
       .reset_index()
       .drop('index',axis=1))

#Merge with the original Dataframe
df = df.merge(df2,left_index=True,right_index=True,on='label')[['label','column1','column2']]

希望這可以幫助

假設它們只是一對標簽,您也可以使用以下內容:

# Create dataframe
df = pd.DataFrame(data = {'label' :['a', 'a', 'b', 'b'],
                 'column1' :[1,2, 6,4]})
# iterate over dataframe, identify matching label and opposite value
for index, row in df.iterrows():
    newvalue = int(df[(df.label == row.label) & (df.column1 != row.column1)].column1.values[0])
    # set value to new column
    df.set_value(index, 'column2', newvalue)

df.head()

以下使用groupbyapply ,似乎工作正常:

x = pd.DataFrame({ 'label': ['a','a','b','b'],
                   'column1': [1,2,6,4] })

y = x.groupby('label').apply(
    lambda g: g.assign(column2 = np.asarray(g.column1[::-1])))
y = y.reset_index(drop=True)  # optional: drop weird index

print(y)

您可以使用groupby with apply創建具有groupby訂單的新Series

df['column2'] = df.groupby('label')["column1"] \
                  .apply(lambda x: pd.Series(x[::-1].values)).reset_index(drop=True)

print (df)
   column1 label  column2
0        1     a        2
1        2     a        1
2        6     b        4
3        4     b        6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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