根据其他数据框列值更新数据框列值

时间:2019-05-29 11:02:48

标签: python pandas

我有一个熊猫数据框,其中有几列。 我想根据协议中的值从“信息”栏中获取前三个元素。

例如:如果协议是TCP,我希望信息中的前3个元素。

使用下面的代码,我可以将操作所需的列分开。但是我不知道如何使下一段代码适应于此。

chunk[['Protocol', 'Information']] = chunk[['Protocol', 'Information']]

编辑:

我希望更新这些值。不要将它们分开。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

import pandas

data = data = {'Name':['first', 'second', 'third', 'fourth'],
        'Age':[27, 27, 22, 32],
        'Address':['New York', 'ABC', 'XYZ', 'Nowhere'],
        'Qualification':['Msc', 'MA', 'MA', 'Phd']}

# Make a dataframe object
df = pandas.DataFrame(data)

# Your condition
# for example we want to get the rows with `Qualitication=='MA'
is_MA_qualified = df['Qualification'] == 'MA'

# Now to filter your data
MA_qualified = df[is_MA_qualified]

# You can use `head(n)` to get first three rows
first_three_MA_qualified = MA_qualified.head(3)

# And finally, to get any desired columns
first_three_MA_qualified[['Age','Address']]

更新: 要更新单元格,您可以遍历行,然后更改满足条件的单元格的值:

...
for index, row in df.iterrows():
    if row['Age'] >= 18:
        df.at[index, 'Qualification'] = 'Verified'

答案 1 :(得分:0)

我已经能够基于给定值更新值:

chunk.loc[chunk['Protocol'] == tcp, 'Information'] = 5

但是现在我只是将值更改为数字5。我宁愿使用lambda表达式或函数来获取前三个元素,而仅保留这些值。