能否同时遍历熊猫df和数组?

时间:2019-11-13 22:38:09

标签: python pandas dataframe

我有两组不同的数据传递给方法。一个是熊猫数据框,另一个是数组。数据框具有我要映射到数组的一列。像这样

data = {'index':[2, 5, 1, 3],
        'file':["file1", "file2", "file3","file4" ]}

# Create DataFrame
df = pd.DataFrame(data)

labels = ["rope", "dope", "goat", "badger"]

for x,y in zip(df, labels):
        print(x[0])
        print(y)

我想要的输出看起来像这样:

file1,涂料 file2,涂料 file3,山羊

是否有一种简单的方法可以做到这一点,或者我需要遍历两个数组并构建一个新数组?

4 个答案:

答案 0 :(得分:4)

more-itertools具有一种名为interleave的方法,可以为您执行此操作。

但是,如果您不想使用该软件包,则只​​需使用配方(它使用zipitertools.chain):

print(*itertools.chain(*zip(data['fields'], labels)), sep=', ')

结果:

file1, rope, file2, dope, file3, goat, file4, badger

答案 1 :(得分:0)

好,所以我问了一下就解决了。我比平常更笨。

data = {'index':[2, 5, 1, 3],
        'file':["file1", "file2", "file3","file4" ]}

# Create DataFrame
df = pd.DataFrame(data)

files = df["file"]
print(files)
labels = ["rope", "dope", "goat", "badger"]

for x,y in zip(files, labels):
        print(x)
        print(y)

答案 2 :(得分:0)

只需同时使用listzip来获取输出。

data = {'index':[2, 5, 1, 3],
        'file':["file1", "file2", "file3","file4" ]}
labels = ["rope", "dope", "goat", "badger"]
# Create DataFrame
df = pd.DataFrame(data)

output = list(zip(df['file'], labels))

输出将是:

[('file1', 'rope'), ('file2', 'dope'), ('file3', 'goat'), ('file4', 'badger')]

答案 3 :(得分:0)

IIUC,

您要按索引排序,然后创建一个新数组?

import itertools
df.sort_index(inplace=True)
new_arr = list(zip(df['file'],labels))
print(list(itertools.chain(*new_arr)))
out: 
['file3', 'rope', 'file1', 'dope', 'file4', 'goat', 'file2', 'badger']