繁体   English   中英

基于另一列熊猫数据框迭代列值匹配值

[英]Iterate over column values matched value based on another column pandas dataframe

这是对

基于另一列熊猫数据框提取列值

我有不止一行与列值匹配,并且想知道如何迭代以在有多个匹配项时有效地检索每个值。

数据框是

A  B
p1 1
p1 2
p3 3
p2 4
p4 3
p5 5
p6 2
p7 5
... around 10000 rows

下面将始终选择 p3

df.loc[df['B'] == 3, 'A'].iloc[0]

所以我试着像这样迭代

 if(len(df.loc[df['B'] == 3, 'A'])) > 1:
                        for i in range(0,len(df.loc[df['B'] == 3, 'A']))-1):
                            print(i,df.loc[df['B'] == 3, 'A'].iloc[i])))

它打印

0 p3
1 p4

对于所有匹配值

但是,有没有更有效的方法来做到这一点?

您可以通过在df.loc代码中不使用.iloc[0]来获取所有匹配值,如下所示:

df.loc[df['B'] == 3, 'A']

输出:

2    p3
4    p4
Name: A, dtype: object

输出左侧的2 4是原始行索引。 如果想知道这 2 个提取的数据来自哪些行,您可以使用此信息。

删除iloc部分和reset_index以真正获得您的输出:

df.loc[df['B'] == 3, 'A'].iloc[0]
                         ^^^^^^^^ Unnecessary
>>> df.loc[df['B'] == 3, 'A'].reset_index(drop=True)
0    p3
1    p4
Name: A, dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM