我有一个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
如何添加标志列并填充它?
答案 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