大小写敏感的熊猫系列匹配和清理熊猫系列逻辑

2024-09-27 23:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个水果的数据框架:

df = pd.read_csv(newfile, header=None)
df
             0        1        2             3        4        5    6   7
0        Apple  Bananas      Fig    Elderberry   Cherry    Honeydew NaN NaN 
1      Bananas   Cherry   Dragon    Elderberry      NaN         NaN NaN NaN
2       Cherry    Grape      NaN           NaN      NaN         NaN NaN NaN
3       Dragon      NaN    Apple        Bananas  Cherry  Elderberry NaN NaN
4   Elderberry    Apple  Bananas            Fig   Grape         NaN NaN NaN
5          Fig   Cherry Honeydew          Apple     NaN         NaN NaN NaN
6        Grape      NaN      NaN            NaN     NaN         NaN NaN NaN
7     Honeydew    Grape      Fig     Elderberry  Dragon      Cherry Bananas Apple    

我试着找到“水果配对”,例如在第一排,苹果和无花果是一对,第六排无花果和苹果是一对。同样的苹果接骨木和接骨木苹果,但不是苹果和香蕉(这一行没有以香蕉开始的苹果)。你知道吗

我有下面的代码工作,这就是:

fruits = df[0]
stock  = df.drop(0, axis=1)

for i in range(len(fruits)):
    string1 = str(fruits[i])
    full_line = (stock.iloc[i])
    line = np.array(full_line.dropna(axis=0))
    if len(line) > 0 : 
        for j in range(len(stock)):
            iind = (fruits[fruits == line[j]].index[0])
            this_line = stock.iloc[iind]
            logic_out = this_line.str.match(string1)
            print(logic_out)

但是!! (1) 它在fruits==行[j]处中断,因为Pandas系列区分大小写,(2)布尔输出是True、false和nan的混合。理想情况下,我只想数一数真相。非常感谢您的帮助!!你知道吗


Tags: 苹果appledflenstocklinefignan
1条回答
网友
1楼 · 发布于 2024-09-27 23:18:11

我将使用设置逻辑、熊猫堆叠和numpy广播

f = lambda x: x.title() if isinstance(x, str) else x

s = df.applymap(f).set_index('0').rename_axis(None).stack().groupby(level=0).apply(set)

f = s.index
p = s.values

one_way = (p[:, None] & [{x} for x in f]).astype(bool)
[(f[i], f[j]) for i, j in zip(*np.where(one_way & one_way.T))]

[('Apple', 'Elderberry'),
 ('Apple', 'Fig'),
 ('Apple', 'Honeydew'),
 ('Bananas', 'Dragon'),
 ('Bananas', 'Elderberry'),
 ('Dragon', 'Bananas'),
 ('Elderberry', 'Apple'),
 ('Elderberry', 'Bananas'),
 ('Fig', 'Apple'),
 ('Fig', 'Honeydew'),
 ('Honeydew', 'Apple'),
 ('Honeydew', 'Fig')]

相关问题 更多 >

    热门问题