我有一个这样的数据集:
x = {'column1': ['a','a','b','b','b','c','c','c','d'],
'column2': [1,0,1,1,0,1,1,0,1]
}
df = pd.DataFrame(x, columns = ['column1', 'column2'])
print (df)如何从第二列中仅提取值为1的数据(如下所示):
x = {'column1': ['a','b','b','c','c','d'],
'column2': [1,1,1,1,1,1]
}
df = pd.DataFrame(x, columns = ['column1', 'column2'])
print (df)另外,我如何计算列1中每个值的1的数量,并创建一个新列,并将该信息插入coulmn_1中的各个索引(例如,column_1中的索引值a有多少个1?).So它将数据帧转换为以下格式:
x = {'column1': ['a','b','b','c','c','d'],
'column2': [1,1,1,1,1,1],
'column3': [1,2,2,2,2,1]
}
df = pd.DataFrame(x, columns = ['column1', 'column2','column3'])
print (df)发布于 2020-01-07 17:57:55
第一个问题:
df[df.column2==1].reset_index(drop=True)会给你带来
column1 column2
0 a 1
1 b 1
2 b 1
3 c 1
4 c 1
5 d 1第二个问题:
df['column3'] = df.groupby('column1').transform(len)会给你带来
column1 column2 column3
0 a 1 1
1 b 1 2
2 b 1 2
3 c 1 2
4 c 1 2
5 d 1 1发布于 2020-01-07 17:57:13
使用boolean indexing和Series.eq进行比较,就像使用==,然后使用Series.map和Series.value_counts
df = df[df['column2'].eq(1)]
df['column3'] = df['column1'].map(df['column1'].value_counts())GroupBy.transform和GroupBy.size的替代方案
df['column3'] = df.groupby('column1')['column1'].transform('size')print (df)
column1 column2 column3
0 a 1 1
2 b 1 2
3 b 1 2
5 c 1 2
6 c 1 2
8 d 1 1对于默认索引,最后使用带有drop=True的DataFrame.reset_index
df = df.reset_index(drop=True)
print (df)
column1 column2 column3
0 a 1 1
1 b 1 2
2 b 1 2
3 c 1 2
4 c 1 2
5 d 1 1https://stackoverflow.com/questions/59625993
复制相似问题