Hello World
我有52个数据帧(df和数据),每个数据帧仅包含带有首字母的Name(名称)。
下面是字母A和B(包含在df和数据中)的示例
dfA dfB
Code Name Code Name
15 Amiks 68 Bernard
157 Alis 14 Barpti
dataA dataB
Code Name Code Name
Amiks Berti
Alis Bernard
Anatole Barpti
问题:
不是Python专家,如何在具有相同字母的数据框上循环?而不是寻找所有数据框,而是寻找相同的字母。
例如:检查是否:
原始DF在下面
df data
Code Name Code Name
15 Amiks Amiks
157 Alis Alis
14 Barpti Bernard
68 Bernard Barpti
我刚为每个字母创建了一个df。
目的是为了加快计算时间,并避免在整个DF中进行检查,因为我们只能检查具有相同首字母的行。
感谢任何帮助。
答案 0 :(得分:0)
您应该认为变量名称仅对您有意义,而对Python解释器没有意义。当然,有一些使用locals()
或globals()
的骇客方式,但绝不能在 normal 代码中使用它们。
这意味着您的数据框是相关的,您应该使用数据结构来跟踪该关系。您可以使用2个列表或成对列表,例如:
dataframes = [ (dfA, dataA), (dfB, dataB), ...]
如果字母本身很重要,则可以使用字典:
dataframes = { 'A': (dfA, dataA), 'B': (dfB, dataB), ...}
然后您可以轻松地进行迭代:
for letter in dataframes:
commons = dataframes[letter][0].merge(dataframes[letter][1], on='Name',
suffixes=('_x', ''))[['Code', 'Name']]
# process commons which contains code and name where datax.Name is in dfx.Name
...
但是,除非原始数据帧真的很大,否则我建议您将第一个字母帧的单个数据帧与52个数据帧进行基准测试。如果一切都适合记忆,熊猫就算有效……
答案 1 :(得分:0)
对于那些可能感兴趣的人,以下是我的工作:
步骤1:重新合并所有df和数据。
输出为:
步骤2:检索姓名的第一个字母
# Function to retrieve first letter
def first_letter(data, col):
a= data[col].map(lambda x: x[0])
b= np.unique(a)
c= b.tolist()
return c
步骤3:循环DF和数据
仅比较首字母相同的名称
# Apply function to retrieve unique first letter of Name's column and UV
first= first_letter(df, 'Name')
# Loop over each first letter to apply the matching by starting with the same letter for both DF
for letter in first:
df_first= df[df['Name'].str.startswith(letter)]
data_first= data[data['Name'].str.startswith(letter)]
# Process
....
使用此代码,我只能为那些具有相同首字母并且没有查看整个DF的人匹配名称。