使用熊猫应用和替换数据框

时间:2019-02-21 04:13:45

标签: python pandas

我有如下所示的数据框,并希望通过熊猫中的“ apply method”使用以下def来更改以下结果df。
据我所知,“套用”方法使一系列内容不替换原始df。

id a b
-------
a  1 4
b  2 5
c  6 2

if df['a'] > df['b'] :
    df['a'] = df['b']
else :
    df['b'] = df['a']

result df :

id a b
-------
a  4 4
b  5 5
c  6 6

3 个答案:

答案 0 :(得分:2)

我不确定您需要什么,因为期望的输出与您的条件不同,所以在这里我只能修复您的代码

for x,y in df.iterrows():
    if y['a'] > y['b']:
        df.loc[x,'a'] = df.loc[x,'b']
    else:
        df.loc[x,'b'] = df.loc[x,'a']

df
Out[40]: 
  id  a  b
0  a  1  1
1  b  2  2
2  c  2  2

如果我正确理解了您的问题

df.assign(**dict.fromkeys(['a','b'],np.where(df.a>df.b,df.a,df.b)))
Out[43]: 
  id  a  b
0  a  1  1
1  b  2  2
2  c  2  2

答案 1 :(得分:1)

和其余的一样,不是完全确定您要做什么,我要去ASSUME是指将整个当前“ A”或“ B”值的值设置为等于最高值该行中任一列的值。...如果该假设正确,则可以使用“ .apply()”进行此操作。

第一件事,是“ .apply()”的大多数“干净”应用程序(记住,通常不建议使用“ .apply()”的应用程序)利用一种函数来获取行输入,该行由“ .apply()”函数,通常返回相同的对象,但根据需要进行修改/更改/等。考虑到您的数据框,此函数可实现所需的输出,然后使用“ .apply()”对数据框应用该函数。

# Create the function to be used within .apply()
def comparer(row):
    if row["a"] > row["b"]:
        row["b"] = row["a"]
    elif row["b"] > row["a"]:
        row["a"] = row["b"]
    return(row)

# Use .apply() to execute our function against our column values. Returning the result of .apply(), re-creating the "df" object as our new modified dataframe.
df = df.apply(comparer, axis=1)

大多数人(如果不是所有人)似乎都反对使用“ .apply()”。我可能会注意他们的智慧:)

答案 2 :(得分:0)

尝试:

df = pd.DataFrame({'a': [1, 2, 6], 'b': [4,5,2]})

df['a'] = df.max(axis=1)
df['b'] = df['a']