我正在试图定位一个dataframe的所有行,其一个属性值(例如id_proof)值匹配到另一个列的第二部分(例如adr_proof),该列以一个固定的单词(例如父)开头,并且对应的值应该匹配,这些值应该是同一数据same的一部分。
例如,在dataframe中:
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下面是我的密码。我知道我的代码不完整。我被拆分()函数困住了。对于python和大熊猫,我是新手,我不知道如何调用熊猫的拆分()函数,而不是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请提供一个方法来实现我的目标。输出是另一个数据帧。请原谅错误的代码或任何违规行为。另一种完全不同的做法也受到赞赏。谢谢。
发布于 2017-03-31 11:56:41
既然你的主要问题似乎是如何整合熊猫的分裂功能:
可以使用以下方法隔离包含关键字“父”的行:
parent_main = main[main.adr_proof.str.split(' ').str[0] == 'PARENT']现在,您可以轻松地提取第二个值:
parent_main.adr_proof.str.split(' ').str[-1]发布于 2017-03-31 10:58:03
在特定情况下,您不能调用熊猫库的str.split(),因为您使用的是DataFrame对象,而且这个特定对象没有实现str.split()。只有Series对象实现str.split()。
发布于 2017-03-31 14:57:10
在对此进行了研究并在IRC网络freenode.net上的#python通道中讨论了这个问题之后,我有一个答案给您。你不能用熊猫库的str.split()来遮挡Python的str.split()。
而且,DataFrame对象没有str.split()。我读过整个API,也玩过from ... import ...,以某种方式从熊猫中导入str.split(),并遮挡了Python的str.split()。
在代码中使用的DataFrame对象没有str.split()。代码中的str.split()没有抛出错误的唯一原因是因为它恰好内置并使用了str.split()。
我能找到的唯一有str.split()的熊猫对象是Series对象pandas.Series.str.split()。但是,您不是使用Series对象,而是使用DataFrame对象。对不起,没什么可做的。
如果你问我,熊猫的结构坏了。您不能只导入str.split(),因为str基本上是一个StringMethods对象,这个对象位于strings包下,它位于core包中,后者位于熊猫的顶层包中。乱七八糟!我花了两个小时来理解它的包/模块/对象结构。
而且,pandas.Series.str.split()基本上是pandas.core.series.Series.str.split()。我刚放弃了!
试着从熊猫身上进口str.split(),你会得到诺贝尔奖的!
https://stackoverflow.com/questions/43138714
复制相似问题