我试图找到一个数据框的所有行,其中一个属性(比如id_proof)值与另一个列的第二部分(比如说adr_proof)匹配,它以一个固定的单词(比如PARENT)开头,并且相应的值应该是匹配是同一数据帧的一部分。
例如,在数据框中:
import pandas as pd
main = {'account_number' : [1,2,3,4,5,6,7,8,9,10,11,12],
'id_proof' : ['A','B','B','A','C','C','X','Y','X','Y','Y','X'],
'id_value' : [101,201,301,401,501,601,111,222,333,444,555,666],
'adr_proof' : ['Z','E','E','G','G','I','PARENT A','PARENT B','PARENT B','PARENT C','PARENT C','PARENT A'],
'adr_value' : [11,22,33,44,55,66,101,201,301,501,601,401]}
main = pd.DataFrame(main)
我正在努力实现:
node1 node2 relation
1 7 parent-child
2 8 parent-child
3 9 parent-child
4 12 parent-child
5 10 parent-child
6 11 parent-child
以下是我的代码。我知道我的代码不完整。我坚持使用split()函数。我是python和pandas的新手,我不知道如何调用大熊猫' split()函数而不是python的内置str.split()函数。我已经完成了这个question
import pandas as pd
main = {'account_number' : [1,2,3,4,5,6,7,8,9,10,11,12],
'id_proof' : ['A','B','B','A','C','C','X','Y','X','Y','Y','X'],
'id_value' : [101,201,301,401,501,601,111,222,333,444,555,666],
'adr_proof' : ['Z','E','E','G','G','I','PARENT A','PARENT B','PARENT B','PARENT C','PARENT C','PARENT A'],
'adr_value' : [11,22,33,44,55,66,101,201,301,501,601,401]}
main = pd.DataFrame(main)
df_group_count = pd.DataFrame({'count' : main.groupby(['adr_proof']).size()}).reset_index()
adr_type = df_group_count['adr_proof']
adr_type_parent = adr_type.loc[adr_type.str.startswith('PARENT',na=False)]
df_j_ = pd.DataFrame()
for j in adr_type_parent:
dfn_j = main.loc[(main['adr_proof'] == j)]
adr_type_parent_type = j.split(' ',expand=True,n=1)
res = main.loc[(main['id_proof'] == adr_type_parent_type[1]) & (main['id_value'] == dfn_j['adr_value'])]
res
请提供实现目标的方法。输出是另一个数据帧。请原谅不良代码或任何违规行为。一种完全不同的方法也值得赞赏。谢谢。
答案 0 :(得分:1)
在特定情况下,您无法调用pandas库的str.split()
,因为您正在使用DataFrame
对象,并且此特定对象未实现str.split()
。只有Series
对象实现str.split()
。
答案 1 :(得分:1)
由于你的主要问题似乎是如何整合pandas split功能:
您可以使用以下方法隔离包含关键字“PARENT”的行:
parent_main = main[main.adr_proof.str.split(' ').str[0] == 'PARENT']
现在,您可以轻松提取第二个值:
parent_main.adr_proof.str.split(' ').str[-1]
答案 2 :(得分:0)
在对此进行调查并在IRC网络freenode.net上的#python频道讨论此事后,我有一个答案。你不能用pandas库的str.split()
掩盖str.split()
的Python。
此外,DataFrame
对象没有str.split()
。我已经阅读了整个API,并且还使用from ... import ...
以某种方式从pandas导入str.split()
并掩盖了Python的str.split()
。
您在代码中使用的DataFrame
对象没有str.split()
。代码str.split()
中唯一没有引发错误的原因是因为Python内置str.split()
并使用它。
我能找到的唯一具有str.split()
的pandas对象是Series
对象,pandas.Series.str.split()
。但是您没有使用Series
对象,而是使用DataFrame
对象。对不起,没有什么可做的。
如果你问我,大熊猫的结构就会破裂。您不能只导入str.split()
,因为str
基本上是StringMethods
个对象,而且此对象位于strings
包中,该包位于core
} package,它位于pandas顶级包中。一团糟!我浪费了2个小时来了解它的包/模块/对象结构。
此外,pandas.Series.str.split()
基本上是pandas.core.series.Series.str.split()
。我放弃了!
尝试从熊猫中导入str.split()
,您将获得诺贝尔奖!