[英]How to iterate over rows and index in a DataFrame in Pandas to filter bolean values
[英]Iterate over rows in Pandas dataframe to find values in other file and extract index
我有一個 csv 文件作為大熊貓數據框導入,文件名在一列中。 我有另一個文件,它是一個 numpy 數組,其中具有相同的文件名但索引不同。 你能幫我遍歷 csv 文件中的文件名以在 numpy 文件中找到匹配項並提取文件名在 numpy 文件中的索引嗎?
例如:
d = {'col1': ["Apple", "Peach"], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2
0 Apple 3
1 Peach 4
b = np.array(["Apple", "Banana", "Pear", "Peach"])
b
array(['Apple', 'Banana', 'Pear', 'Peach'], dtype='<U6')
現在我想現在從 df 中的每個項目在它們在數組中的索引處,這樣我就可以在另一個數組中的那個位置附加一些東西。
我試過這樣的事情:
for i,j in df:
if j in b:
print(b.get_loc)
IIUC,我們可以將 array 和 df 轉換為以索引為鍵的字典,並使用函數來查找匹配對:
import collections as colls
import numpy as np
import pandas as pd
d = {'col_1': ['Apple', 'Peach'], 'col_2': [3, 4]}
df = pd.DataFrame(data=d)
b = np.array(['Apple', 'Banana', 'Pear', 'Peach'])
d_1 = df['col_1'].to_dict()
d_2 = dict(enumerate(b))
def dicts_to_tuples(*dicts):
result = colls.defaultdict(list)
for curr_dict in dicts:
for k, v in curr_dict.items():
result[v].append(k)
return [tuple(v) for v in result.values() if len(v) > 1]
print(d_1) # {0: 'Apple', 1: 'Peach'}
print(d_2) # {0: 'Apple', 1: 'Banana', 2: 'Pear', 3: 'Peach'}
print(dicts_to_tuples(d_1, d_2)) # [(0, 0), (1, 3)]
剩下的就靠你了。
您甚至可以將數組轉換為數據框並執行合並:
df2 = pd.DataFrame(b)
merge_ = pd.merge(df,df2,left_on=['col1',df.index],right_on=['col1',df2.index],how='inner')
這個解決方案有效嗎? 是否需要知道對應的key,如果不需要,這只是索引列表:
mask = np.in1d(b,df['col1'])
idx = np.arange(len(mask))
idx[mask]
# array([0, 3])
您也可以這樣做以獲取位置的字典:
df['idx'] = idx[mask]
df.set_index('idx')['col1'].to_dict()
# {0: 'Apple', 3: 'Peach'}
df.set_index('col1')['idx'].to_dict()
# {'Apple': 0, 'Peach': 3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.