Dwie ramki na jednym obrazku

0

Cześć,
Posiadam dwa ramki danych które mają różne długości,

df1=pd.DataFrame({
   
'zarobki':[1856,1558,1235,1145,6657,5564,2565,4568,4657,25657,1567,15657,1556,1447,1568],
'PlaceGodzinoweEuro':[10,15,17,18,9,30,17,18,19,65,14,17,18,6,18],
'temperaturaCelsjusza':[36,34,20,28,27,28,29,20,21,10,17,18,18,6,18]
})
 
df2=pd.DataFrame({
'Branza':['Mechanika','Budowlana','Produkcja','Produkcja','IT','IT','Produkcja','Budowlana','Produkcja','Produkcja','Mechanika','IT','IT','IT','Budowlana'],
'Kraj':['Polska','Niemcy','Ukraina','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Francja','Ukraina']
})

Chciałbym aby dla każdego kraju w barplot wyliczył mi średnie zarobki przez plot line

plt.figure(figsize=(20,10))

width=0.75
fig, ax = plt.subplots()
ax2 = ax.twinx()

df1['zarobki'].plot(ax=ax, color='red')
df2['Kraj'].value_counts().plot(kind='bar',ax=ax2, alpha= 0.5,width=width)

plt.show()

Mam coś takiego, ale ten plot line inaczej wyglada bez barplota a inaczej z barplot

0

@printHello: Ustawiłem do tego 'sztuczny' klucz, ale to chyba nie rozwiązuje problemu, bo zarobki dla każdego kraju są takie same:

df1=pd.DataFrame({
   
'zarobki':[1856,1558,1235,1145,6657,5564,2565,4568,4657,25657,1567,15657,1556,1447,1568],
'PlaceGodzinoweEuro':[10,15,17,18,9,30,17,18,19,65,14,17,18,6,18],
'temperaturaCelsjusza':[36,34,20,28,27,28,29,20,21,10,17,18,18,6,18]
})
 
df2=pd.DataFrame({
'Branza':['Mechanika','Budowlana','Produkcja','Produkcja','IT','IT','Produkcja','Budowlana','Produkcja','Produkcja','Mechanika','IT','IT','IT','Budowlana'],
'Kraj':['Polska','Niemcy','Ukraina','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Francja','Ukraina']
})
 
df1['tmp']=1
df2['tmp']=1
 
data = df1.merge(df2, on=['tmp'])
data = data.drop('tmp', axis=1)
 
data.groupby('Kraj')['zarobki'].mean().plot(kind='bar')
0

Problem można obejść jeszcze tak :

df1=pd.DataFrame({
    
'zarobki':[1856,1558,1235,1145,6657,5564,2565,4568,4657,25657,1567,15657,1556,1447,1568],
'PlaceGodzinoweEuro':[10,15,17,18,9,30,17,18,19,65,14,17,18,6,18],
'temperaturaCelsjusza':[36,34,20,28,27,28,29,20,21,10,17,18,18,6,18]
})

df2=pd.DataFrame({
'Branza':['Mechanika','Budowlana','Produkcja','Produkcja','IT','IT','Produkcja','Budowlana','Produkcja','Produkcja','Mechanika','IT','IT','IT','Budowlana'],
'Kraj':['Polska','Niemcy','Ukraina','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Francja','Ukraina']
})


df1['tmp']=1
df2['tmp']=1

frames=[df1, df2]
result = pd.concat([df1, df2], axis=1)
result = result.drop('tmp', axis=1)
result.groupby('Kraj')['zarobki'].mean().plot(kind='bar')

Ale czy istnieje sposób aby to robić bez tworzenia takiej sztucznej zmiennej ?

0

Spójrzcie proszę na to i naprowadźcie mnie jak to zrobić dobrze

df1=pd.DataFrame({
    
'zarobki':[1856,1558,1235,1145,6657,5564,2565,4568,4657,25657,1567,15657,1556,1447,1568],
'PlaceGodzinoweEuro':[10,15,17,18,9,30,17,18,19,65,14,17,18,6,18],
'temperaturaCelsjusza':[36,34,20,28,27,28,29,20,21,10,17,18,18,6,18]
})

df2=pd.DataFrame({
'Branza':['Mechanika','Budowlana','Produkcja','Produkcja','IT','IT','Produkcja','Budowlana','Produkcja','Produkcja','Mechanika','IT','IT','IT','Budowlana'],
'Kraj':['Polska','Niemcy','Ukraina','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Niemcy','Francja','Ukraina','Polska','Francja','Ukraina']
})


plt.figure(figsize=(20,10))
df2['Kraj'].value_counts().plot(stacked=True, kind="bar")
ax = df1['zarobki'].plot(secondary_y=True, color='k', marker='o')
ax.set_ylabel('size')

plt.show()

ten kod wyświetla bar plot i pokazuje ilość wystąpień danego kraju w df2, i chciałbym aby na drugiej osi Y pokazywał mi przez funkcję plot line średnią kwotę dla danego kraju. Jak to zrobić ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1