#python #pandas #numpy #dataframe
#python #pandas #numpy #фрейм данных
Вопрос:
У меня есть список DFS Pandas, каждый из которых имеет одинаковый columns
:
df1_values = [["2001-01-01","Lime",10],["2001-01-02","Lime",20]]
df2_values = [["2001-01-01","Mango",40],["2001-01-02","Mango",50],["2001-01-03","Mango",60]]
df3_values = [["2001-01-01","Orange",30]]
df1 = pd.DataFrame(df1_values,columns=["date","fruit","value"])
df2 = pd.DataFrame(df2_values,columns=["date","fruit","value"])
df3 = pd.DataFrame(df3_values,columns=["date","fruit","value"])
dfs = [df1,df2,df3]
один из примеров DFS -> DF1:
date fruit value
0 2001-01-01 Lime 10
1 2001-01-02 Lime 20
Попытка merge
всех DFS list
в приведенном ниже формате (сгруппированных по дате), ОЖИДАЕМАЯ ОПЕРАЦИЯ:
date fruit value
2001-01-01 Lime 10
2001-01-01 Mango 40
2001-01-01 Orange 30
2001-01-02 Lime 20
2001-01-02 Mango 50
2001-01-03 Mango 60
Текущий итеративный подход:
date_dict={}
for each_date in ["2001-01-01","2001-01-02","2001-01-03"]:
for each_df in dfs:
if each_date in date_dict:
#append the values for this date
else:
#enter the values for this date
Это работает, но занимает много времени.
Подход Pandas:
from functools import reduce
df_merged = reduce(lambda left,right: pd.merge(left,right,on=['fruit'],
how='outer'), dfs)
OP:
date_x fruit value_x date_y value_y date value
0 2001-01-01 Lime 10.0 NaN NaN NaN NaN
1 2001-01-02 Lime 20.0 NaN NaN NaN NaN
2 NaN Mango NaN 2001-01-01 40.0 NaN NaN
3 NaN Mango NaN 2001-01-02 50.0 NaN NaN
4 NaN Mango NaN 2001-01-03 60.0 NaN NaN
5 NaN Orange NaN NaN NaN 2001-01-01 30.0
Любые предложения о том, как исправить ошибки, могут быть полезны.
Ответ №1:
Вы можете выполнить pandas.concat
следующее .sort_values
:
print( pd.concat(dfs).sort_values('date') )
С принтами:
date fruit value
0 2001-01-01 Lime 10
0 2001-01-01 Mango 40
0 2001-01-01 Orange 30
1 2001-01-02 Lime 20
1 2001-01-02 Mango 50
2 2001-01-03 Mango 60