Python 合并字符串列上的两个数据帧-复合字符串列
我正在尝试合并两个具有以下结构的巨大数据帧(4+百万): 数据帧A:Python 合并字符串列上的两个数据帧-复合字符串列,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我正在尝试合并两个具有以下结构的巨大数据帧(4+百万): 数据帧A: date Fruit a b c d 01 "apple" 0 3 5 1 03 "apple" 8 2 7 2 02 "banana" 1 4 3 5 04 "banana" 3 5 2 6
date Fruit a b c d
01 "apple" 0 3 5 1
03 "apple" 8 2 7 2
02 "banana" 1 4 3 5
04 "banana" 3 5 2 6
03 "pineapple" 2 6 4 6
05 "pineapple" 3 5 7 9
数据帧B:
date Fruits x y z
01 "apple, pear, strawberry" a n q
02 "banana, apple, coconut" b m p
03 "pineapple, pear, banana" c s o
04 "banana, apple, coconut" d f v
05 "pineapple, pear, banana" r ñ t
我试图实现的是具有以下结构的第三个数据帧:
数据帧C:
date Fruit a b c d x y z
01 "apple" 0 3 5 1 a n q
03 "apple" 0 3 5 1 0 0 0
02 "banana" 1 4 3 5 b m p
04 "banana" 1 4 3 5 d f v
03 "pineapple" 2 6 4 6 c s o
05 "pineapple" 2 6 4 6 r ñ t
...
我已经试过这样的方法:
test = market_test.assetCode.apply(lambda x : news_test.assetCodes.str.find(x)>=0)
但是我的内核坏了,我还尝试使用for循环将Bdataframe的果列扩展为'fruit-B'列,保留其他B列的数据,然后在date列和'fruit-B列之间合并,但是执行时间太长了
是否有一种使用数据帧a和B获取数据帧C的方法,该方法不会消耗大量时间和内存
水果和水果列类型为字符串。使用:
print (df_A)
date Fruit a b c d
0 1 apple 0 3 5 1
1 3 apple 8 2 7 2
2 2 banana 1 4 3 5
3 4 banana 3 5 2 6
4 3 pineapple 2 6 4 6
5 5 pineapple 3 5 7 9
print (df_B)
date Fruits x y z
0 1 apple, pear, strawberry a n q
1 2 banana, apple, coconut b m p
2 3 pineapple, pear, banana c s o
3 4 banana, apple, coconut d f v
4 5 pineapple, pear, banana r ñ t
df_A和df_B中出现的独特水果的总数是多少?您可以将它们转换为一个hot或category,而不是作为字符串存储。
df_B.Fruits
是一个复合列。我会重新命名这个“在字符串列/复合字符串列上合并两个数据帧”@smci,谢谢你的回答,唯一的水果编号应该在5000左右,我也会按照你的建议重新命名这个问题。
import pandas as pd
import numpy as np
# Split the strings into list.
df_B.Fruits = df_B.Fruits.str.split(', ')
# reindex and repeat on length of list
temp = df_B.reindex(df_B.index.repeat(df_B.Fruits.str.len())).drop('Fruits',1)
temp['Fruit'] = np.concatenate(df_B.Fruits.values)
df_C = df_A.merge(temp, on=['date','Fruit'], how='left').fillna(0)
print (df_C)
date Fruit a b c d x y z
0 1 apple 0 3 5 1 a n q
1 3 apple 8 2 7 2 0 0 0
2 2 banana 1 4 3 5 b m p
3 4 banana 3 5 2 6 d f v
4 3 pineapple 2 6 4 6 c s o
5 5 pineapple 3 5 7 9 r ñ t