使用Pandas进行简单数据分析-如何删除重复代码
下面是一个例子:使用Pandas进行简单数据分析-如何删除重复代码,pandas,Pandas,下面是一个例子: import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import matplotlib.dates as mdates import matplotlib.ticker as ticker import numpy as np dfboth = { 'I': [1,2,3,4,5,6], 'S': ['X', 'Y', 'X', 'Y', 'X',
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
import numpy as np
dfboth = {
'I': [1,2,3,4,5,6],
'S': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'DVAR': [800, 300, 820, 330, 910, 350],
'CVAR': [1001, 612, 990, 639, 600, 130]}
dfboth = pd.DataFrame(dfboth)
dfboth = dfboth.assign(DVARCHANGE=dfboth['DVAR'].diff(2))
dfboth = dfboth.assign(CVARCHANGE=dfboth['CVAR'].diff(2))
plt.rcParams["figure.figsize"] = (24, 9) # (w, h)
plt.subplot(2,2,1)
plt.plot('I','DVAR', data=dfboth[dfboth.S=="X"])
plt.plot('I','DVARCHANGE', data=dfboth[dfboth.S=="X"])
plt.title("X-D")
plt.legend()
plt.subplot(2,2,2)
plt.plot('I','DVAR', data=dfboth[dfboth.S=="Y"])
plt.plot('I','DVARCHANGE', data=dfboth[dfboth.S=="Y"])
plt.title("Y-D")
plt.legend()
plt.subplot(2,2,3)
plt.plot('I','CVAR', data=dfboth[dfboth.S=="X"])
plt.plot('I','CVARCHANGE', data=dfboth[dfboth.S=="X"])
plt.title("X-C")
plt.legend()
plt.subplot(2,2,4)
plt.plot('I','CVAR', data=dfboth[dfboth.S=="Y"])
plt.plot('I','CVARCHANGE', data=dfboth[dfboth.S=="Y"])
plt.title("Y-C")
plt.legend()
我有一系列的数据点(时间序列),I=1,2,3。。。它们都属于某个“S”,在这个例子中,X和Y。对于每个读数,我们有两个变量DVAR和CVAR。我正在尝试制作这个图表
我比较了sx和Y,DVAR和它在先前读数上的变化,以及CVAR和它在先前读数上的变化
你还可以看到令人讨厌的重复。但实际上我有12个S,不仅仅是X和Y,还有更多的变量
我相信有一种比我所写的使用堆叠索引或某种透视表更好的方法来实现这一点。但我还没弄明白 您可以将
用于循环:
plot_titles = ["X-D", "Y-D", "X-C", "Y-C"]
y1 = ['DVAR', 'DVAR', 'CVAR', 'CVAR']
y2 = [y + 'CHANGE' for y in y1]
data1 = ["X", "Y", "X", "Y"]
for i in range(4):
plt.subplot(2, 2, i+1)
plt.plot('I', y1[i], data = dfboth[dfboth.S == data1[i]])
plt.plot('I', y2[i], data = dfboth[dfboth.S == data1[i]])
plt.title(plot_titles[i])
plt.legend()
是的,我想到了类似的事情,但我认为我可以做一些更地道的熊猫。。。我不知道为什么我试着用pandas语言做每件事,声明性的而不是程序性的…这也不太有效,因为你没有dfearl=dfearl.assign(DVARCHANGE=dfearl['DVAR'].diff(2))dfearl=dfearl.assign(cvarchane=dfearl['CVAR'].diff(2))逻辑同意,有pandas这样做的方法会很好。我现在想不出答案,所以我希望其他人会回答。