【发布时间】:2017-10-09 18:49:42
【问题描述】:
我有一个 pandas 的水果数据框::
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
我正在尝试寻找“水果配对”,例如第一排的苹果和无花果是一对,第六排的无花果和苹果是一对。同样适用于 Apple-Elderberry 和 Elderberry-Apple,但不是 Apple 和 Bananas(没有以 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) 由于 Pandas Series 区分大小写,它在结果 == line[j] 处中断,并且 (2) 布尔输出是 True、False 和 NaN 的混合。理想情况下,我只想计算 Trues。任何和所有的帮助非常感谢!
【问题讨论】:
标签: python pandas logic series case-sensitive