python - 如何在多个 CSV 文件上使用 describe() 并使用 CSV 文件名保存到一个文件中
问题描述
我有 4 个 CSV 文件。我正在使用describe()
方法来获取所有文件的描述。代码工作没有任何错误
def describe():
descr = []
for csv in CSVS:
dataset_name = csv.stem[: csv.stem.find("_")]
df = pd.read_csv(csv)
des = df.groupby("Method").describe().round(2).Col11
des.name = dataset_name
descr.append(des.T)
descr_df = pd.concat(descr)
return descr_df
我得到的输出
Method_1 Method_2 Method_3
Count
mean
Std
min
...
我的预期输出如下
Dataset_1 Dataset_2 Dataset_3
Method_1 Count
mean
Std
min
...
Method_2 Count
mean
Std
min
任何形式的建议表示赞赏。
解决方案
stack
每个摘要和unstack
级别 0 并stack
再次调用.to_frame
并传递数据框的名称(摘要所属)即您想要的列名,最后重置列,对所有数据框摘要执行此操作,最后outer
合并它们,重命名根据要求列,并设置索引
pd.merge(df1.describe().stack().unstack(0).stack().to_frame('df1').reset_index(),
df2.describe().stack().unstack(0).stack().to_frame('df2').reset_index(), how='outer')\
.rename(columns={'level_0':'Methods', 'level_1':'Statistics'})\
.set_index(['Methods', 'Statistics'])
输出:
df1 df2
Methods Statistics
A count 5.000000 5.000000
mean 0.521492 0.620648
std 0.262874 0.373520
min 0.129904 0.155943
25% 0.446187 0.273549
50% 0.512456 0.866164
75% 0.714380 0.881218
max 0.804531 0.926368
B count 5.000000 NaN
mean 0.641817 NaN
std 0.163022 NaN
min 0.474867 NaN
25% 0.475255 NaN
50% 0.658282 NaN
75% 0.791397 NaN
max 0.809282 NaN
C count NaN 5.000000
mean NaN 0.735040
std NaN 0.194365
min NaN 0.470806
25% NaN 0.668021
50% NaN 0.690349
75% NaN 0.877549
max NaN 0.968477
你有你需要的结构,你可以把它写到文件中。
更新:
对于许多数据集,您可以在循环中使用上述逻辑,这样的事情应该可以工作:
out = pd.DataFrame(columns=['level_0', 'level_1'])
for i,df in enumerate([df1, df2], 1):
out =df.describe().stack().unstack(0).stack().to_frame(f'Dataset_{i}').reset_index()\
.merge(out, how='outer')
out = out.rename(columns={'level_0':'Methods', 'level_1':'Statistics'})\
.set_index(['Methods', 'Statistics'])
推荐阅读
- javascript - Javascript - 用对象值替换字符串中的单词
- docusignapi - JWT Grant 内置在 PHP SDK 中?
- c# - 如何在不使用 TextBox 的情况下直接从 DataGridView 更新 SQL 数据库?
- java - 在 Spring Boot 应用程序中传递常量消息的正确方法(messages.properties 或常量类)
- reactjs - 如何在 React 中访问动态添加的字段值?
- java - JFoenix 无法访问无法访问类 com.sun.javafx.scene.NodeHelper
- php - 在资源路由中创建 laravel
- boolean-logic - 当且仅当某个输入为真时返回真
- android - retrofit2 补丁请求不响应正文
- angularjs - AngularJS ngTable 与服务器端加载