我不确定是否有更有效的方法来执行此操作。我有一个df
和一个Column
,其中包含感兴趣的信息。对于下面的df,我对Column B
感兴趣。我想为每个plots
值创建单独的W,X,Y,Z
。这些值更改时,我也希望开始每个单独的图。
import pandas as pd
import matplotlib.pyplot as plt
d = ({
'A' : [1,2,3,4,5,6,7,8,1,3],
'B' : ['W','W','X','X','Y','Y','Z','Z','W','W'],
})
df = pd.DataFrame(data=d)
因此,该df将显示4个不同的图。 W
值有2行。
我目前正在将上述df导出到单独的series
中。如果我绘制与W
相关的值,输出将是:
W1 W2 X1 Y1 Z1
0 1 1 3 5 8
1 2 3 4 6 9
fig, ax = plt.subplots()
plt.plot(df['W1'])
plt.plot(df['W2'])
但这意味着我要创建许多单独的series
和plots
。如果我的df
包含1000个rows
,并且在两个值之间不断变化,这并不是很低效率。
有更容易的方法吗?我认为当值更改时,我仍然必须将每个值导出到它自己的系列中。
但是我希望有一种更简便的方法,无需执行此操作即可将每个系列绘制在彼此的顶部。
答案 0 :(得分:0)
我认为需要:
g = df['B'].ne(df['B'].shift()).cumsum()
df['C'] = g.groupby(df['B']).transform(lambda x: pd.factorize(x)[0]).add(1).astype(str)
df['D'] = df.groupby(['B','C']).cumcount()
df = df.set_index(['D','C','B'])['A'].unstack([2,1])
df.columns = df.columns.map(''.join)
print (df)
W1 X1 Y1 Z1 W2
D
0 1 3 5 7 1
1 2 4 6 8 3
df.groupby(df.columns.str[0], axis=1).plot()