【问题标题】:Python: Write all combinations of a pd.Series in a text filePython:在文本文件中写入 pd.Series 的所有组合
【发布时间】:2023-03-17 23:54:01
【问题描述】:

我有几个 Pandas 系列的唯一字符串:

    First Series
    P0A8V2
    P36683
    P15254

    Second Series
    P09831
    P0AFG8

我想写一个像这样的文本文件(制表符分隔符):

P0A8V2 P36683
P0A8V2 P15254
P36683 P15254 
P09831 P0AFG8

所以在一个系列中,每个对象都只相互组合一次。顺序无关紧要。然后下一个系列马上开始。

有没有简单的方法可以做到这一点?

更新:

字符串位于 DataFrame 的索引中。我使用 df.index.values 访问它们。 DataFrame 位于 df_list 中。

def Cluster_Network(df_list):
    combi_list = []
    for cluster in df_list:
       combi_list.append(tuple(itertools.combinations(cluster.index.values, 2)))
    return combi_list

我得到一个包含对的元组列表。

  [('P77717', 'P10378'),
  ('P18393', 'P77444'),
  ('P18393', 'P0AD44'),
  ('P18393', 'P10378'),
  ('P77444', 'P0AD44'),
  ('P77444', 'P10378'),
  ('P0AD44', 'P10378')),
 (('P77562', 'P41039'),)]

如何从该列表中写入文本文件?

【问题讨论】:

  • 你能展示你的尝试吗?

标签: python pandas combinations


【解决方案1】:

看起来你快到了。

combi_list = []
for cluster in df_list:
    combi_list.append(pd.DataFrame(list(itertools.combinations(cluster.index, 2))))
result_df = pd.concat(combi_list, ignore_index=True)
result_df.to_csv(filename, sep='\t', index=False, header=False) 

这会生成一个像这样的文件:

P0A8V2  P36683
P0A8V2  P15254
P36683  P15254
P09831  P0AFG8

【讨论】:

  • 谢谢,我的文件似乎是正确的。但我收到错误:IOError: [Errno 22] invalid mode ('w') or filename: 'Cluster_Network.csv'
  • 会不会是路径的问题? stackoverflow.com/questions/15141761/…
【解决方案2】:

另一种方法是使用将系列转换为列表,然后使用 itertools.combinations 来获得所需的结果......就像这样,

import pandas as pd
s1  = pd.Series(['a', 'b', 'c'])
s2  = pd.Series(['d', 'e'])

import itertools
s= s1.tolist()
s.extend(s2.tolist())
open('test.txt','w').writelines(["%s\t%s\n" % (item[0], item[1])  for item in list(itertools.combinations(s,2))])

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多