根据Python

时间:2018-02-28 11:37:38

标签: python pandas numpy dictionary combinations

我有以下数据集:

d = {
'Company':['A','A','A','A','B','B','B','B','C','C','C','C','D','D','D','D'],
'Individual': [1,2,3,4,1,5,6,7,1,8,9,10,10,11,12,13]
}

现在,我需要在Python中创建“公司”所有元素对的列表,这些元素对应于“个人”中的值。

E.g。对于上面的数据集,上面的输出应如下所示: ((A,B),(A,C),(B,C),(C,D))。前三个元组,因为个人1隶属于A,B和C 最后一个,个人10隶属于C和D

进一步说明 - 如果个体= 1,则上述数据集具有“A”,“B”和“C”值。现在,我想创建这三个值(元组)的所有唯一组合,因此它应该创建一个包含元组(A,B),(A,C)和(B,C)的列表。接下来是个人= 2。这里只有值'A',因此没有元组可以附加到列表中。对于下一个人,每个人只有一个相应的公司,因此没有进一步的配对。唯一需要添加的元组是Individual = 10,因为它的值为'C'和'D' - 因此应该将元组(C,D)添加到列表中。

3 个答案:

答案 0 :(得分:4)

一种解决方案是使用<input type="number">

pandas

这不是最有效的方法,但它可能很直观。

答案 1 :(得分:1)

试试这个,

public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<Headers> _listDataHeader; 
private HashMap<Headers, List<FixturesObject>> _listDataChild;

public ExpandableListAdapter(Context context, List<Headers> listDataHeader,
                             HashMap<Headers, List<FixturesObject>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}
@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .size();
}

@Override
public Object getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public Object getChild(int groupPosition, int childPosition) {

    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosition);
}


@Override
public long getGroupId(int groupPosition) {
        return groupPosition;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

    Headers headers = (Headers) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group, null);
    }

    TextView lblListHeader = (TextView) convertView.findViewById(R.id.textHeader);
    lblListHeader.setTypeface(null, Typeface.BOLD);
    ImageView imageView = (ImageView) convertView.findViewById(R.id.image);


        lblListHeader.setText(headers.getNameLeague());
        imageView.setImageResource(headers.getImageID());
    return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    FixturesObject fixturesObject =(FixturesObject) getChild(groupPosition,childPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);
    }
    TextView HomeTeamName = (TextView) convertView.findViewById(R.id.home_team_name);

    HomeTeamName.setText(fixturesObject.getMatchHometeamName());
    return convertView;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}
}

答案 2 :(得分:1)

以下是您提炼问题的解决方案:

from collections import defaultdict
from itertools import combinations

data = {'Company':['A','A','A','A','B','B','B','B','C','C','C','C','D','D','D','D'],
        'Individual': [1,2,3,4,1,5,6,7,1,8,9,10,10,11,12,13]}

d = defaultdict(set)

for i, j in zip(data['Individual'], data['Company']):
    d[i].add(j)

res = {k: sorted(map(sorted, combinations(v, 2))) for k, v in d.items()}

# {1: [['A', 'B'], ['A', 'C'], ['B', 'C']],
#  2: [],
#  3: [],
#  4: [],
#  5: [],
#  6: [],
#  7: [],
#  8: [],
#  9: [],
#  10: [['C', 'D']],
#  11: [],
#  12: [],
#  13: []}
相关问题