Python:创建新列并从另一行复制值,这是当前行的交换

时间:2018-11-15 07:10:03

标签: python-3.x pandas

我有一个包含3列的数据框:

import pandas as pd

d = {'A':  ['left', 'right', 'east', 'west', 'south', 'north'], 'B': ['right', 'left', 'west', 'east', 'north', 'south'], 'VALUE': [0, 1, 2, 3, 4, 5]}

df = pd.DataFrame(d)

数据框如下所示:

  A       B   VALUE
left    right   0
right   left    1
east    west    2
west    east    3
south   north   4
north   south   5

我正在尝试创建一个新列VALUE_2,其中应包含同一数据框中交换行的值。

  

例如:右-左值为0,左-右值为1,我希望新列中的交换值如下:

  A       B   VALUE VALUE_2
left    right   0     1
right   left    1     0
east    west    2     3
west    east    3     2
south   north   4     5
north   south   5     4

我尝试过:

for row_num, record in df.iterrows():
    A = df['A'][index]
    B = df['B'][index]
    if(pd.Series([record['A'] == B, record['B'] == A).all()):
        df['VALUE_2'] = df['VALUE']

我很惊讶,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

var categories = bill.Products.Select(p=>p.ProductCategory).ToList(); var products = bill.Products.ToList(); // other List<TEntity>... // import the categories firstly , since they might be referenced by other entity await this._importer.ImportBatch<ProductCategory,int>(categories); // import the product secondly , since they might be referenced by BillProduct table await this._import.ImportBatch<Product,int>(products); // ... import others 使用map

Series

答案 1 :(得分:1)

更详细的答案:

import pandas as pd

d = {'A':  ['left', 'right', 'east', 'west', 'south', 'north'], 'B': ['right', 'left', 'west', 'east', 'north', 'south'], 'VALUE': [0, 1, 2, 3, 4, 5]}

df = pd.DataFrame(d)

pdf = pd.DataFrame([])
for idx, item in df.iterrows():
    indx = list(df['B']).index(str(df['A'][idx]))
    pdf = pdf.append(pd.DataFrame({'VALUE_2': df.iloc[indx][2]}, index=[0]), ignore_index=True)

print(pdf)
data = pd.concat([df, pdf], axis=1)
print(data)