我有两个数据源,可以按一个字段加入这些数据源,并希望在图表中进行汇总:
两个DataFrames共享列A:
ROWS = 1000
df = pd.DataFrame.from_dict({'A': np.arange(ROWS),
'B': np.random.randint(0, 60, size=ROWS),
'C': np.random.randint(0, 100, size=ROWS)})
df.head()
Run Code Online (Sandbox Code Playgroud)
A B C
0 0 10 11
1 1 7 64
2 2 22 12
3 3 1 67
4 4 34 57
Run Code Online (Sandbox Code Playgroud)
和other我这样加入:
A B C
0 0 10 11
1 1 7 64
2 2 22 12
3 3 1 67
4 4 34 57
Run Code Online (Sandbox Code Playgroud)
A B C D
0 0 10 11 One
1 1 7 64 Two
2 2 22 12 One
3 3 1 67 Two
4 4 34 57 One
Run Code Online (Sandbox Code Playgroud)
获取具有以下计数的柱形图的正确方法:
按B分组,分为0、1-10、11-20、21-30、21-40、41 +。
IIUC,这可以极大地简化为单个groupby,利用clip并np.ceil形成您的组。具有2个级别的单个拆栈将B组作为x轴,其中每个DC组合都带有条形:
如果您想要更好的标签,可以映射groupby值:
(df.groupby(['D',
df.C.ge(50).map({True: 'GE50', False: 'LT50'}),
np.ceil(df.B.clip(lower=0, upper=41)/10).map({0: '0', 1: '1-10', 2: '11-20', 3: '21-30', 4: '31-40', 5: '41+'})
])
.size().unstack([0,1]).plot.bar())
Run Code Online (Sandbox Code Playgroud)
它也等效于B组:
pd.cut(df['B'],
bins=[-np.inf, 1, 11, 21, 31, 41, np.inf],
right=False,
labels=['0', '1-10', '11-20', '21-30', '31-40', '41+'])
Run Code Online (Sandbox Code Playgroud)