Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-合并具有相同子字符串的所有列_Python_Pandas - Fatal编程技术网

Python Pandas-合并具有相同子字符串的所有列

Python Pandas-合并具有相同子字符串的所有列,python,pandas,Python,Pandas,我有许多列包含相同的子字符串,我想使用OR函数将它们合并为一个 所以我想合并所有具有相同属性的列 dfin.columns.str.split("_").str[1] first_RG7509| first_YY6124| last_YY6124| first_WE4818|first_AA7542| last_RG7509 1|0|1|1|0|0 输出应为: RG7509|YY6124|WE4818|AA7542 1|1|1|0 如何实现这一点?您可以使用转置,按每个

我有许多列包含相同的子字符串,我想使用OR函数将它们合并为一个


所以我想合并所有具有相同属性的列

dfin.columns.str.split("_").str[1]

first_RG7509|   first_YY6124|   last_YY6124|    first_WE4818|first_AA7542|  last_RG7509

1|0|1|1|0|0
输出应为:

RG7509|YY6124|WE4818|AA7542

1|1|1|0

如何实现这一点?

您可以使用转置,按每个字符串的第二部分分组,然后再转置回:

>>> df.T.groupby(df.T.index.str.split('_').str[1]).sum() > 0).T.astype(int)
    AA7542  RG7509  WE4818  YY6124
0   0   1   1   1

可以使用axis=1执行groupby:

In [11]: df
Out[11]:
   first_RG7509  first_YY6124  last_YY6124  first_WE4818  first_AA7542  last_RG7509
0             1             0            1             1             0            0

In [12]: df.groupby(lambda x: x.split("_")[1], axis=1).sum()
Out[12]:
   AA7542  RG7509  WE4818  YY6124
0       0       1       1       1

您也可以进行重复检查:

df.columns = df.columns.str.split('_').str[1]
df = (df.T.sort_values(by=0)
          .reset_index()
          .drop_duplicates(subset='index', keep='last')
          .set_index('index').T)
充分证明:

import pandas as pd

data = '''\
first_RG7509|first_YY6124|last_YY6124|first_WE4818|first_AA7542|last_RG7509
1|0|1|1|0|0'''

df = pd.read_csv(pd.compat.StringIO(data), sep='|')

df.columns = df.columns.str.split('_').str[1]
df = (df.T.sort_values(by=0)
          .reset_index()
          .drop_duplicates(subset='index', keep='last')
          .set_index('index').T)

合并还是删除?从您的示例来看,您不清楚要实现什么逻辑。请清理您的帖子并添加干净且可复制的示例,我想合并所有具有相同
dfin.columns.str.split(“”).str[1]
的列,但是合并是如何完成的?Sum,mean,first?我认为通过“merge”OP意味着“聚合”——OP希望通过逻辑or进行聚合。使用axis=1可以避免这种转置技巧(通常其他许多函数也是如此)!谢谢,@AndyHayden-我不知道。你的答案是什么。