gpt4 book ai didi

对象上的 Python itertools 组合

转载 作者:太空狗 更新时间:2023-10-30 02:24:47 26 4
gpt4 key购买 nike

python itertools 组合库可以用于对象而不是列表吗?

例如,我如何在以下数据上使用它?

Rahul - 20,000 - Mumbai

Shivani - 30,000 - Mumbai

Akash - 40,000 - Bangalore

我想要所有可能的姓名组合和组合薪水值。

我如何使用组合来做到这一点?
假设数据是使用 pd.read_csv 读取并存储的。

到目前为止的代码 -

import pandas as pd
import itertools
df = pd.read_csv('stack.csv')

print (df)

for L in range(0, len(df)+1):
for subset in itertools.combinations(df['Name'], L):
print (subset)

输出

      Name  Salary       City
0 Rahul 20000 Mumbai
1 Shivani 30000 Mumbai
2 Akash 40000 Bangalore
()
('Rahul',)
('Shivani',)
('Akash',)
('Rahul', 'Shivani')
('Rahul', 'Akash')
('Shivani', 'Akash')
('Rahul', 'Shivani', 'Akash')

Process finished with exit code 0

如何将薪水添加到这些组合中?

最佳答案

首先,获取您的索引:

idx = [j for i in range(1, len(df) + 1) for j in list(itertools.combinations(df.index, i))]
# [(0,), (1,), (2,), (0, 1), (0, 2), (1, 2), (0, 1, 2)]

获取每个组的数据框:

dfs = [df.iloc[list(i)] for i in idx]

最后,加入并求和:

out = [(', '.join(i.name.values), sum(i.salary.values)) for i in dfs]

输出:

[('Rahul', 20000),
('Shivani', 30000),
('Akash', 40000),
('Rahul, Shivani', 50000),
('Rahul, Akash', 60000),
('Shivani, Akash', 70000),
('Rahul, Shivani, Akash', 90000)]

如果你想把它作为一个数据框,那很简单:

df1 = pd.DataFrame(out, columns=['names', 'salaries'])

names salaries
0 Rahul 20000
1 Shivani 30000
2 Akash 40000
3 Rahul, Shivani 50000
4 Rahul, Akash 60000
5 Shivani, Akash 70000
6 Rahul, Shivani, Akash 90000

要查询此数据框以找到最接近给定薪水的值,我们可以编写一个辅助函数:

def return_closest(val):
return df1.iloc[(df1.salaries - val).abs().idxmin()]


>>> return_closest(55000)
names Rahul, Shivani
salaries 50000
Name: 3, dtype: object

我特意将其分解,以便您了解每一步发生的事情。一旦您确实理解了,您就可以将其组合成一行来创建您的数据框:

pd.DataFrame(
[(', '.join(d.name.values), sum(d.salary.values))
for i in [j for i in range(1, len(df) + 1)
for j in list(itertools.combinations(df.index, i))]
for d in [df.iloc[list(i)]]], columns=['names', 'salaries']
)

关于对象上的 Python itertools 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com