填充源-目标对和列表中的标志

时间:2019-02-05 07:25:49

标签: python pandas

我有一个list,它具有源流到目标流,看起来像-

path_list = ['A', 'A', 'B', 'C', 'C']

我想为上面包含3列的列表填充DataFrame-
 source, destination, flag。示例-

source destination flag
 'A'      'A'      Type_1
 'A'      'B'      -
 'B'      'C'      -
 'C'      'C'      Type_2

我想根据以下规则填充flag列-如果list中的前2个条目相同,则Type_1,如果后2个条目相同,则{{1 }}。所有其他源-目标对将标记为Type_2

我已经过了一半,并且有一个脚本填充了-source列-

destination

如何添加标志列并填充它?

2 个答案:

答案 0 :(得分:3)

使用df.flag.iat[0]

来赋予特定的单元格值
import pandas as pd

path_list = ['A', 'A', 'B', 'C', 'C']
df = pd.DataFrame({'source': path_list[:-1], 'destination': path_list[1:]})
df['flag'] = '-'

if path_list[0] == path_list[1]:
    df.flag.iat[0] = 'Type_1'

if path_list[-1] == path_list[-2]:
    df.flag.iat[-1] = 'Type_2'
print(df)

输出:

  source destination   flag
0      A           A  Type_1
1      A           B      -
2      B           C      -
3      C           C  Type_2

答案 1 :(得分:2)

DataFrame是根据path_list创建的,因此只能分配第一个和最后一个值并重复-的新列表:

path_list = ['A', 'A', 'B', 'C', 'C']

df = pd.DataFrame({'source': path_list[:-1], 'destination': path_list[1:]})

df['flag'] = ['Type_1'] + ['-'] * (len(df) - 2) + ['Type_2']
print (df)
  source destination    flag
0      A           A  Type_1
1      A           B       -
2      B           C       -
3      C           C  Type_2

但是如果需要按列表的前2个值和后2个值对齐值,请创建MultiIndex并由loc设置:

#DataFrame with different order
print (df)
  source destination
0      A           B
1      B           C
2      A           A
3      C           C


path_list = ['A', 'A', 'B', 'C', 'C']

df = df.set_index(['source','destination'])
df['flag'] = '-'
df.loc[tuple(path_list[:2]), 'flag'] = 'Type_1'
df.loc[tuple(path_list[-2:]), 'flag'] = 'Type_2'

df = df.reset_index()
print (df)
  source destination    flag
0      A           B       -
1      B           C       -
2      A           A  Type_1
3      C           C  Type_2