我正在尝试将两个数据帧合并在一起,并在一系列链接操作中删除重叠的列:
# people.head()
| name | id
|---------|----
0 | Jacob | 150
1 | Richard | 160
2 | John | 230
3 | Kate | 420
4 | Hugo | 1080
# age.head()
| age | id
|------|---
0 | 1024 | 15
1 | 128 | 16
2 | 56 | 23
3 | 32 | 42
4 | 24 | 108
combined = people.join(age, lsuffix='_TO_DROP_')
# combined.head()
| name | age | id | id_TO_DROP
|---------|------|-----|-----------
0 | Jacob | 1024 | 15 | 150
1 | Richard | 128 | 16 | 160
2 | John | 56 | 23 | 230
3 | Kate | 32 | 42 | 420
4 | Hugo | 24 | 108 | 1080
我现在可以删除由join
引起的任何重复的列
combined.drop(columns=[col for col in combined.columns if col.endswith('_TO_DROP_'])
是否可以通过链接join
和drop
操作来做到这一点?
people\
.join(age, lsuffix='_TO_DROP_')\
.drop(columns=[col for col in INTERMED_DF.columns if col.endswith('_TO_DROP_')])
具体地,在链接的drop
调用中,如何访问上一个(链接的)join
调用的输出?
我的用例的另一个细节:重叠的列不完全对齐。应该在其上连接数据的列是数据框架索引,因此在我的示例中,仅在id
列上进行合并(或连接)将无法实现我想要的功能。
答案 0 :(得分:2)
通过获取difference
并在加入列表时将该列表传递到df中来尝试查找不重叠的列
people=pd.DataFrame(data={"name":["jacob","richard"],
"id":[15,6]})
age = pd.DataFrame(data={"age":[1024,128],
"id":[15,6]})
cols_to_use = age.columns.difference(people.columns)
combined = people.join(age[cols_to_use])
name id age
0 jacob 15 1024
1 richard 6 128
答案 1 :(得分:2)
这是另一种方式:
我正在将people.join(age, lsuffix='_TO_DROP_').filter(regex='^(?!.*TO_DROP_)')
与df.filter()
链接起来,后者带有一个正则表达式参数:
regex:字符串(正则表达式) 保持标签远离re.search(regex,label)== True
的轴
name age id
0 Jacob 1024 15
1 Richard 128 16
2 John 56 23
3 Kate 32 42
4 Hugo 24 108
public class KeyValueDto
{
public int Key { get; set; }
public object Value { get; set; }
}
public class KeyValueDto
{
public string Key { get; set; }
public object Value { get; set; }
}
答案 2 :(得分:1)
根据熊猫文档https://pandas.pydata.org/pandas-docs/version/0.24.2/reference/api/pandas.DataFrame.join.html
private ListNode merge(ListNode list1, ListNode list2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
curr.next = list1;
list1 = list1.next;
} else {
curr.next = list2;
list2 = list2.next;
}
curr = curr.next;
}
if (list1 == null) {
curr.next = list2;
} else {
curr.next = list1;
}
return dummy.next;
}
应该可以工作