pandas 特定格式的DataFrame列值

hxzsmxv2  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(150)

这是我的剧本……

import pandas as pd

data = {'Col1': [132, 148, 149], 'Col2': [232, 248, 249], 'Col3': [312, 308, 309], 'Col4': [1500, 1550, 1600], 'Col5': [530, 590, 568]}
df = pd.DataFrame(data)
print(df)

def lrgst(df, cols, n):
    for key, col in df.set_index('Col4')[cols].items():
        x = col.nlargest(n)
        J=', '.join(f'{a}[{b}]' for a,b in zip(x.index, x))
        return J
print(f"{lrgst(df, ['Col1'], 2)}")

字符串
输出为…

1600[149], 1550[148]


现在我想创建另一个函数来获取同一行中某个特殊列的值(比如Col3),其中col1值在我的函数中找到,并希望将它们保留在我上面输出的括号内。我的输出应该是这样的.

1600[149,309], 1550[148,308]


我想我的新功能是这样的...

def lrgst(df, cols, sp_col, n):
    for key, col in df.set_index('Col4')[cols].items():
        x = col.nlargest(n)
        J=', '.join(f'{a}[{b},{c}]' for a,b,c in zip(x.index, x, idx.sp_col))
        return J
print(f"{lrgst(df, ['Col1'], ['Col3'], 2)}")


请问有什么可以帮我的吗??

tsm1rwdh

tsm1rwdh1#

下面是函数lrgst的更新版本,它包含了额外的要求:

def lrgst(df, cols, sp_col, n):
    for key, col in df.set_index('Col4')[cols].items():
        x = col.nlargest(n)
        J = ', '.join(f'{a}[{b}, {c}]' for a, b, c in zip(x.index, x, df.loc[df['Col4'].isin(x.index), sp_col].values))
        return J

字符串
以下是如何使用此更新的函数:

print(f"{lrgst(df, ['Col1'], 'Col3', 2)}")


这将为您提供给予所需的输出:

1600[149,309], 1550[148,308]


让我知道如果你需要任何进一步的帮助!

djmepvbi

djmepvbi2#

请添加:

sp_col_values = df.set_index('Col4')[sp_cols].loc[x.index]
J = ', '.join(f'{a}[{b},{c}]' for a, b, c in zip(x.index, x, sp_col_values.iloc[:, 0]))

字符串

所有功能:

def lrgst(df, cols, sp_cols, n):
    results = []
    for key, col in df.set_index('Col4')[cols].items():
        x = col.nlargest(n)
        sp_col_values = df.set_index('Col4')[sp_cols].loc[x.index]
        J = ', '.join(f'{a}[{b},{c}]' for a, b, c in zip(x.index, x, sp_col_values.iloc[:, 0]))
        results.append(J)
    return results

print(', '.join(lrgst(df, ['Col1'], ['Col3'], 2)))

输出:

1600[149,309], 1550[148,308]

编辑:

调用函数的方式和你在帖子里提到的一样:print(f"{lrgst(df, ['Col1'], ['Col3'], 2)}")
新增功能:

def lrgst(df, cols, sp_cols, n):
    result = []
    for key, col in df.set_index('Col4')[cols].items():
        x = col.nlargest(n)
        sp_col_values = df.set_index('Col4')[sp_cols].loc[x.index]
        J = ', '.join(f'{a}[{b},{c}]' for a, b, c in zip(x.index, x, sp_col_values.iloc[:, 0]))
        result.append(J)
    return ', '.join(result)

print(f"{lrgst(df, ['Col1'], ['Col3'], 2)}")


另一种方法:

def lrgst(df, cols, sp_cols, n):
    return ', '.join(
        f'{a}[{b},{c}]'
        for key, col in df.set_index('Col4')[cols].items()
        for a, b, c in zip(col.nlargest(n).index, col.nlargest(n).values, df.set_index('Col4')[sp_cols].loc[col.nlargest(n).index][sp_cols[0]])
    )

print(f"{lrgst(df, ['Col1'], ['Col3'], 2)}")

相关问题