如何在同一数据帧中乘以两列?我的数据框看起来像下面的图像,我想像这样输出。但是,我找不到如何将依赖于同一数据帧的第一行的两列相乘。我真的很感激你的帮助。
request totalbytes
/login 8520
/shuttle/countdown/ 7970
/shuttle/countdown/liftoff.html 0
答案 0 :(得分:3)
似乎只需要多列:
df['totalbytes'] = df['bytesbytes']*df['bytesfrequency']
或使用mul
:
df['totalbytes'] = df['bytesbytes'].mul(df['bytesfrequency'])
样品:
df = pd.DataFrame({'bytesbytes':[3985,1420,0,0],
'bytesfrequency':[2,6,2,2]})
df['totalbytes'] = df['bytesbytes']*df['bytesfrequency']
print (df)
bytesbytes bytesfrequency totalbytes
0 3985 2 7970
1 1420 6 8520
2 0 2 0
3 0 2 0
但第一列groupby
可能需要request
并使用transform
创建新的Series
多个(transform
转换两列只需要一个):
df = pd.DataFrame({ 'request':['a','a','b','b'],
'bytesbytes':[3985,1420,1420,0],
'bytesfrequency':[2,6,6,2]})
g = df.groupby('request')
print (g['bytesbytes'].transform('first'))
0 3985
1 3985
2 1420
3 1420
Name: bytesbytes, dtype: int64
print (g['bytesfrequency'].transform('first'))
0 2
1 2
2 6
3 6
Name: bytesfrequency, dtype: int64
df['totalbytes'] = g['bytesbytes'].transform('first')*g['bytesfrequency'].transform('first')
print (df)
bytesbytes bytesfrequency request totalbytes
0 3985 2 a 7970
1 1420 6 a 7970
2 1420 6 b 8520
3 0 2 b 8520
编辑:
如果需要删除request
列的重复项:
df = pd.DataFrame({ 'request':['a','a','b','b'],
'bytesbytes':[3985,1420,1420,0],
'bytesfrequency':[2,6,6,2]})
print (df)
bytesbytes bytesfrequency request
0 3985 2 a
1 1420 6 a
2 1420 6 b
3 0 2 b
一行解决方案 - drop_duplicates
,多个和最后drop
列:
df = df.drop_duplicates('request')
.assign(totalbytes=df['bytesbytes']*df['bytesfrequency'])
.drop(['bytesbytes','bytesfrequency'], axis=1)
print (df)
request totalbytes
0 a 7970
2 b 8520
df = df.drop_duplicates('request')
df['totalbytes'] = df['bytesbytes']*df['bytesfrequency']
df = df.drop(['bytesbytes','bytesfrequency'], axis=1)
print (df)
request totalbytes
0 a 7970
2 b 8520
答案 1 :(得分:1)
现在你解释了你想要的东西......你真的想要删除重复项:
(df['bytesbytes']*df['bytesfrequency']).drop_duplicates()
答案 2 :(得分:1)
获得发布的预期结果的简短方法
df.drop_duplicates().set_index('request').prod(1).reset_index(name='totalbytes')
request totalbytes
0 /shuttle/countdown 7970
1 /login 8520
2 /shuttle/countdown/liftoff.html 0
答案 3 :(得分:0)
请修改您的标题,因为它非常具有误导性。
另外,为了回答您的问题,pandas
有一个方便的drop_duplicates
方法。我强烈建议你看一下。
简而言之,该方法实际上删除了所有重复的行并返回一个新的DataFrame
。或者,您可以使方法仅考虑某些行 - 详细信息可以在文档中找到。
在您的情况下,您可以这样做:
df2 = df2.drop_duplicates()[['requests', 'totalbytes']]
列索引完全是可选的,但我添加了它们,因为我认为您只想在最终输出中使用这两列。