【问题标题】:Dataset from original原始数据集
【发布时间】:2020-01-17 19:30:00
【问题描述】:

我有一个这样的数据框:

  a|b|c|d
1  true|false|true|false
2  false|true|true|false
3  true|true|true|false

我希望它的结构如下:

a,c
b,c
a,b,c

并导出到文本文件。 我们怎么能做到这一点? 我试过并且可以做相反的事情,但不是这个。你能给我一些想法吗?

【问题讨论】:

  • 你能发布你的df.head().to_dict()吗?\

标签: python python-3.x pandas dataframe


【解决方案1】:

您可以修改列名,使用dot(As True == 1 和 False == 0),然后去掉结尾的逗号。

#df = df.replace({'true': True, 'false': False}) # If strings, not Bools

df.columns = [f'{x},' for x in df.columns]
df.dot(df.columns).str.strip(',')

#0      a,c
#1      b,c
#2    a,b,c
#dtype: object

或者更简单的说,字符串连接通过布尔行系列切片后的列:

pd.Series([','.join(df.columns[x]) for _,x in df.iterrows()],
          index=df.index)

#0      a,c
#1      b,c
#2    a,b,c
#dtype: object

【讨论】:

    【解决方案2】:

    首先,通过在| 符号上拆分第一列来获取列名。 然后在同一符号上拆分该列中的值,并使用条件推导选择拆分值为true 的相应列。 将结果保存回不带索引的.csv 文件。

    cols = df.columns[0].split('|')
    (df
     .iloc[:, 0].str
     .split('|')
     .apply(lambda bools: ','.join(col for col, b in zip(cols, bools) if b == 'true'))
     .to_csv(filename, index=False)
    )
    

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 2021-12-10
      • 2013-05-29
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多