列我有一個數據幀,例如:大熊貓轉換分組的行爲
label column1
a 1
a 2
b 6
b 4
我想從那裏COLUMN1標籤匹配使數據幀與新列,與對面的價值。如:
label column1 column2
a 1 2
a 2 1
b 6 4
b 4 6
我知道這可能是一個groupby命令很簡單,但我一直在搜索,找不到任何東西。
列我有一個數據幀,例如:大熊貓轉換分組的行爲
label column1
a 1
a 2
b 6
b 4
我想從那裏COLUMN1標籤匹配使數據幀與新列,與對面的價值。如:
label column1 column2
a 1 2
a 2 1
b 6 4
b 4 6
我知道這可能是一個groupby命令很簡單,但我一直在搜索,找不到任何東西。
的以下使用groupby
和apply
似乎工作好嗎:
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)
你可以試試下面的代碼塊:
#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()
這個工作。謝謝! – jrich